package usecase import ( "context" ) type OpaUseCase interface { // CheckRBACPermission 確認有無權限 CheckRBACPermission(ctx context.Context, req CheckReq) (CheckOPAResp, error) // LoadPolicy 將 Policy 從其他地方加載到 opa 的 policy 當中 LoadPolicy(ctx context.Context, input []Policy) error GetPolicy(ctx context.Context) []map[string]any } type CheckReq struct { ID string Roles []string Path string Method string } type Grant struct { ID string Path string Method string } type Policy struct { Methods []string `json:"methods"` Name string `json:"name"` Path string `json:"path"` Role string `json:"role"` } type RuleRequest struct { Method string `json:"method"` Path string `json:"path"` Policies []Policy `json:"policies"` Roles []string `json:"roles"` } type CheckOPAResp struct { Allow bool `json:"allow"` PolicyName string `json:"policy_name"` PlainCode bool `json:"plain_code"` // 是否為明碼顯示 Request RuleRequest `json:"request"` }