91 lines
3.7 KiB
Go
91 lines
3.7 KiB
Go
package usecase
|
|
|
|
import (
|
|
"backend/pkg/permission/domain/entity"
|
|
"context"
|
|
)
|
|
|
|
// PermissionUseCase 權限用例介面 (使用 Casbin)
|
|
type PermissionUseCase interface {
|
|
// 基本權限管理
|
|
CreatePermission(ctx context.Context, req CreatePermissionRequest) (*entity.Permission, error)
|
|
GetPermission(ctx context.Context, id string) (*entity.Permission, error)
|
|
UpdatePermission(ctx context.Context, req UpdatePermissionRequest) (*entity.Permission, error)
|
|
DeletePermission(ctx context.Context, id string) error
|
|
ListPermissions(ctx context.Context, req ListPermissionsRequest) ([]*entity.Permission, error)
|
|
|
|
// Casbin 權限檢查
|
|
CheckUserPermission(ctx context.Context, uid, httpMethod, httpPath string) (bool, error)
|
|
CheckRolePermission(ctx context.Context, roleUID, httpMethod, httpPath string) (bool, error)
|
|
CheckPatternPermission(ctx context.Context, uid, pattern, action string) (bool, error)
|
|
BatchCheckPermissions(ctx context.Context, uid string, permissions []PermissionCheck) (map[string]bool, error)
|
|
|
|
// 用戶權限管理
|
|
GetUserPermissions(ctx context.Context, uid string) (map[string]int, error)
|
|
AddPolicyForUser(ctx context.Context, uid, httpPath, httpMethod string) error
|
|
RemovePolicyForUser(ctx context.Context, uid, httpPath, httpMethod string) error
|
|
|
|
// 角色管理
|
|
AddRoleForUser(ctx context.Context, uid, roleUID string) error
|
|
RemoveRoleForUser(ctx context.Context, uid, roleUID string) error
|
|
GetUsersForRole(ctx context.Context, roleUID string) ([]string, error)
|
|
GetRolesForUser(ctx context.Context, uid string) ([]string, error)
|
|
|
|
// 角色權限管理
|
|
AddPermissionForRole(ctx context.Context, roleUID, httpPath, httpMethod string) error
|
|
RemovePermissionForRole(ctx context.Context, roleUID, httpPath, httpMethod string) error
|
|
GetPermissionsForRole(ctx context.Context, roleUID string) (map[string]int, error)
|
|
|
|
// 策略管理
|
|
GetAllPolicies(ctx context.Context) ([][]string, error)
|
|
GetFilteredPolicies(ctx context.Context, fieldIndex int, fieldValues ...string) ([][]string, error)
|
|
}
|
|
|
|
// CreatePermissionRequest 創建權限請求
|
|
type CreatePermissionRequest struct {
|
|
ParentID *string `json:"parent_id,omitempty"`
|
|
Name string `json:"name"`
|
|
HTTPMethod string `json:"http_method,omitempty"`
|
|
HTTPPath string `json:"http_path,omitempty"`
|
|
Status int `json:"status"`
|
|
Type entity.PermissionType `json:"type"`
|
|
}
|
|
|
|
// UpdatePermissionRequest 更新權限請求
|
|
type UpdatePermissionRequest struct {
|
|
ID string `json:"id"`
|
|
Name *string `json:"name,omitempty"`
|
|
HTTPMethod *string `json:"http_method,omitempty"`
|
|
HTTPPath *string `json:"http_path,omitempty"`
|
|
Status *int `json:"status,omitempty"`
|
|
Type *entity.PermissionType `json:"type,omitempty"`
|
|
}
|
|
|
|
// ListPermissionsRequest 列出權限請求
|
|
type ListPermissionsRequest struct {
|
|
Status *int `json:"status,omitempty"`
|
|
Type *entity.PermissionType `json:"type,omitempty"`
|
|
ParentID *string `json:"parent_id,omitempty"`
|
|
Limit int `json:"limit"`
|
|
Skip int `json:"skip"`
|
|
}
|
|
|
|
// PermissionCheck 權限檢查項目
|
|
type PermissionCheck struct {
|
|
HTTPMethod string `json:"http_method"`
|
|
HTTPPath string `json:"http_path"`
|
|
}
|
|
|
|
// CasbinPolicyRequest Casbin 策略請求
|
|
type CasbinPolicyRequest struct {
|
|
Subject string `json:"subject"` // 用戶或角色
|
|
Object string `json:"object"` // 資源
|
|
Action string `json:"action"` // 行為
|
|
}
|
|
|
|
// CasbinRoleRequest Casbin 角色請求
|
|
type CasbinRoleRequest struct {
|
|
User string `json:"user"` // 用戶
|
|
Role string `json:"role"` // 角色
|
|
}
|