62 lines
2.1 KiB
Go
62 lines
2.1 KiB
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
"permission/reborn/domain/entity"
|
|
)
|
|
|
|
// PermissionRepository 權限 Repository 介面
|
|
type PermissionRepository interface {
|
|
// Get 取得單一權限
|
|
Get(ctx context.Context, id int64) (*entity.Permission, error)
|
|
|
|
// GetByName 根據名稱取得權限
|
|
GetByName(ctx context.Context, name string) (*entity.Permission, error)
|
|
|
|
// GetByNames 批量根據名稱取得權限
|
|
GetByNames(ctx context.Context, names []string) ([]*entity.Permission, error)
|
|
|
|
// GetByHTTP 根據 HTTP Path 和 Method 取得權限
|
|
GetByHTTP(ctx context.Context, path, method string) (*entity.Permission, error)
|
|
|
|
// List 列出所有權限
|
|
List(ctx context.Context, filter PermissionFilter) ([]*entity.Permission, error)
|
|
|
|
// ListActive 列出所有啟用的權限 (常用,可快取)
|
|
ListActive(ctx context.Context) ([]*entity.Permission, error)
|
|
|
|
// GetChildren 取得子權限
|
|
GetChildren(ctx context.Context, parentID int64) ([]*entity.Permission, error)
|
|
}
|
|
|
|
// PermissionFilter 權限查詢過濾條件
|
|
type PermissionFilter struct {
|
|
Type *entity.PermissionType
|
|
Status *entity.Status
|
|
ParentID *int64
|
|
}
|
|
|
|
// RolePermissionRepository 角色權限關聯 Repository 介面
|
|
type RolePermissionRepository interface {
|
|
// Create 建立角色權限關聯
|
|
Create(ctx context.Context, roleID int64, permissionIDs []int64) error
|
|
|
|
// Update 更新角色權限關聯 (先刪除再建立)
|
|
Update(ctx context.Context, roleID int64, permissionIDs []int64) error
|
|
|
|
// Delete 刪除角色的所有權限
|
|
Delete(ctx context.Context, roleID int64) error
|
|
|
|
// GetByRoleID 取得角色的所有權限關聯
|
|
GetByRoleID(ctx context.Context, roleID int64) ([]*entity.RolePermission, error)
|
|
|
|
// GetByRoleIDs 批量取得多個角色的權限關聯 (優化 N+1 查詢)
|
|
GetByRoleIDs(ctx context.Context, roleIDs []int64) (map[int64][]*entity.RolePermission, error)
|
|
|
|
// GetByPermissionIDs 根據權限 ID 取得所有角色關聯
|
|
GetByPermissionIDs(ctx context.Context, permissionIDs []int64) ([]*entity.RolePermission, error)
|
|
|
|
// GetRolesByPermission 根據權限 ID 取得所有角色 ID
|
|
GetRolesByPermission(ctx context.Context, permissionID int64) ([]int64, error)
|
|
}
|