39 lines
1.9 KiB
Go
39 lines
1.9 KiB
Go
|
package usecase
|
|||
|
|
|||
|
import (
|
|||
|
"ark-permission/internal/domain"
|
|||
|
"ark-permission/internal/entity"
|
|||
|
)
|
|||
|
|
|||
|
// PermissionTreeManager 定義一組操作權限樹的接口
|
|||
|
// 這個名稱說明它是專門負責管理和操作權限樹的管理器
|
|||
|
type PermissionTreeManager interface {
|
|||
|
// AddPermission 將一個新的權限節點插入到樹中
|
|||
|
// key 是父節點的ID,value 是要插入的 Permission 資料
|
|||
|
// 此方法應該能處理節點是否存在於父節點下的情況
|
|||
|
AddPermission(parentID int64, permission entity.Permission) error
|
|||
|
// FindPermissionByID 根據權限 ID 查詢樹中的某個節點
|
|||
|
// 如果節點存在,返回對應的 Permission 資料,否則返回 nil
|
|||
|
FindPermissionByID(permissionID int64) (*Permission, error)
|
|||
|
// GetAllParentPermissionIDs 根據傳入的 permissions 列表
|
|||
|
// 找出每個權限的完整父節點權限 ID 路徑
|
|||
|
// 例如,如果 B 的父權限是 A,並且給了 B 權限,則返回 A 和 B 的權限 ID
|
|||
|
GetAllParentPermissionIDs(permissions domain.Permissions) ([]int64, error)
|
|||
|
// GetAllParentPermissionStatuses 返回給定權限下的所有完整父節點權限狀態
|
|||
|
// 例如,若給 B 權限,該方法將返回所有與 B 相關的父權限的狀態
|
|||
|
GetAllParentPermissionStatuses(permissions domain.Permissions) (domain.Permissions, error)
|
|||
|
// GetRolePermissionTree 根據角色權限找出所有父節點和子節點權限狀態
|
|||
|
// 角色權限是傳入的一個列表,該方法會根據每個角色的權限,返回所有相關的權限狀態
|
|||
|
GetRolePermissionTree(rolePermissions []entity.RolePermission) domain.Permissions
|
|||
|
}
|
|||
|
|
|||
|
type Permission struct {
|
|||
|
ID int64 `json:"-"`
|
|||
|
Name string `json:"name"`
|
|||
|
HTTPMethod string `json:"http_method"`
|
|||
|
HTTPPath string `json:"http_path"`
|
|||
|
Parent *Permission `json:"-"`
|
|||
|
Children []*Permission `json:"children"`
|
|||
|
PathIDs []int64 `json:"-"` // full path id
|
|||
|
}
|