48 lines
1.0 KiB
Go
48 lines
1.0 KiB
Go
|
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"`
|
||
|
}
|