backend/tmp/reborn/domain/repository/permission.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)
}