backend/generate/api/permission.api

377 lines
13 KiB
Plaintext
Raw Permalink Normal View History

2026-01-07 02:47:37 +00:00
syntax = "v1"
// =================================================================
// Type: 權限 (Permission)
// =================================================================
type (
// PermissionResp 權限回應
PermissionResp {
ID string `json:"id"`
ParentID string `json:"parent_id"`
Name string `json:"name"`
HTTPPath string `json:"http_path,omitempty"`
HTTPMethod string `json:"http_method,omitempty"`
Status string `json:"status"` // active, inactive
Type string `json:"type"` // menu, button, api
}
// PermissionTreeNode 權限樹節點
PermissionTreeNode {
PermissionResp
Children []PermissionTreeNode `json:"children,omitempty"`
}
// GetPermissionByHTTPReq 根據 HTTP 資訊查詢權限請求
GetPermissionByHTTPReq {
Authorization
Path string `json:"path" validate:"required"` // HTTP 路徑
Method string `json:"method" validate:"required"` // HTTP 方法
}
// ExpandPermissionsReq 展開權限請求
ExpandPermissionsReq {
Authorization
Permissions []string `json:"permissions" validate:"required,min=1"` // 權限名稱列表
}
// ExpandPermissionsResp 展開權限回應
ExpandPermissionsResp {
Permissions []string `json:"permissions"` // 展開後的權限列表(包含父權限)
}
// GetUsersByPermissionReq 根據權限查詢用戶請求
GetUsersByPermissionReq {
Authorization
Permissions []string `json:"permissions" validate:"required,min=1"` // 權限名稱列表
}
// GetUsersByPermissionResp 根據權限查詢用戶回應
GetUsersByPermissionResp {
UserUIDs []string `json:"user_uids"` // 擁有指定權限的用戶 UID 列表
}
// ListPermissionsResp 權限列表回應
ListPermissionsResp {
Permissions []PermissionResp `json:"permissions"`
Total int64 `json:"total"`
}
)
// =================================================================
// Type: 角色 (Role)
// =================================================================
type (
// CreateRoleReq 創建角色請求
CreateRoleReq {
Authorization
ClientID int `json:"client_id" validate:"required"`
Name string `json:"name" validate:"required,min=1,max=100"`
Permissions map[string]string `json:"permissions,optional"` // 權限映射key 為權限名稱value 為狀態 (open, close)
}
// UpdateRoleReq 更新角色請求
UpdateRoleReq {
Authorization
Name *string `json:"name,optional" validate:"omitempty,min=1,max=100"`
Status *string `json:"status,optional" validate:"omitempty,oneof=active inactive"`
Permissions map[string]string `json:"permissions,optional"` // 權限映射
}
// RoleResp 角色回應
RoleResp {
ID string `json:"id"`
UID string `json:"uid"`
ClientID int `json:"client_id"`
Name string `json:"name"`
Status string `json:"status"` // active, inactive
Permissions map[string]string `json:"permissions"` // 權限映射
CreateTime string `json:"create_time"`
UpdateTime string `json:"update_time"`
}
// RoleWithUserCountResp 角色回應(含用戶數量)
RoleWithUserCountResp {
RoleResp
UserCount int `json:"user_count"`
}
// ListRolesReq 查詢角色列表請求
ListRolesReq {
Authorization
ClientID int `json:"client_id,optional"`
Name string `json:"name,optional"`
Status string `json:"status,optional" validate:"omitempty,oneof=active inactive"`
Permissions []string `json:"permissions,optional"` // 權限名稱列表(篩選擁有這些權限的角色)
}
// ListRolesResp 角色列表回應
ListRolesResp {
Roles []RoleWithUserCountResp `json:"roles"`
Total int64 `json:"total"`
}
// PageRolesReq 分頁查詢角色請求
PageRolesReq {
Authorization
ClientID int `json:"client_id,optional"`
Name string `json:"name,optional"`
Status string `json:"status,optional" validate:"omitempty,oneof=active inactive"`
Permissions []string `json:"permissions,optional"`
Page int `json:"page,optional" validate:"omitempty,min=1"` // 頁碼,從 1 開始
Size int `json:"size,optional" validate:"omitempty,min=1,max=100"` // 每頁大小
}
// PageRolesResp 角色分頁回應
PageRolesResp {
List []RoleWithUserCountResp `json:"list"`
Total int64 `json:"total"`
Page int `json:"page"`
Size int `json:"size"`
}
)
// =================================================================
// Type: 角色權限 (Role Permission)
// =================================================================
type (
// GetRolePermissionsResp 角色權限回應
GetRolePermissionsResp {
RoleUID string `json:"role_uid"`
Permissions map[string]string `json:"permissions"` // 權限映射
}
// GetUserPermissionsResp 用戶權限回應
GetUserPermissionsResp {
UserUID string `json:"user_uid"`
RoleUID string `json:"role_uid"`
RoleName string `json:"role_name"`
Permissions map[string]string `json:"permissions"` // 權限映射
}
// UpdateRolePermissionsReq 更新角色權限請求
UpdateRolePermissionsReq {
Authorization
Permissions map[string]string `json:"permissions" validate:"required"` // 權限映射
}
// CheckPermissionReq 檢查權限請求
CheckPermissionReq {
Authorization
Path string `json:"path" validate:"required"` // HTTP 路徑
Method string `json:"method" validate:"required"` // HTTP 方法
}
// CheckPermissionResp 檢查權限回應
CheckPermissionResp {
Allowed bool `json:"allowed"` // 是否有權限
PermissionName string `json:"permission_name,omitempty"` // 權限名稱
PlainCode bool `json:"plain_code"` // 是否有 plain_code 權限(特殊邏輯)
}
)
// =================================================================
// Type: 用戶角色 (User Role)
// =================================================================
type (
// AssignRoleReq 指派角色請求
AssignRoleReq {
Authorization
UserUID string `json:"user_uid" validate:"required"`
RoleUID string `json:"role_uid" validate:"required"`
Brand string `json:"brand,optional"` // 品牌標識
}
// UserRoleResp 用戶角色回應
UserRoleResp {
UserUID string `json:"user_uid"`
RoleUID string `json:"role_uid"`
Brand string `json:"brand"`
CreateTime string `json:"create_time"`
UpdateTime string `json:"update_time"`
}
// ListUserRolesReq 查詢用戶角色列表請求
ListUserRolesReq {
Authorization
Brand string `json:"brand,optional"`
RoleID string `json:"role_id,optional"`
Status string `json:"status,optional" validate:"omitempty,oneof=active inactive"`
}
// ListUserRolesResp 用戶角色列表回應
ListUserRolesResp {
UserRoles []UserRoleResp `json:"user_roles"`
Total int64 `json:"total"`
}
// GetUsersByRoleResp 角色用戶列表回應
GetUsersByRoleResp {
UserRoles []UserRoleResp `json:"user_roles"`
Total int64 `json:"total"`
}
)
// =================================================================
// Service: 權限管理 API - 需要登入 (Permission Service)
// =================================================================
@server(
group: permission
prefix: /api/v1/permissions
schemes: https
timeout: 30s
middleware: AuthMiddleware
)
service gateway {
// ==================== 權限管理 ====================
@doc(
summary: "取得所有權限"
description: "取得系統中所有啟用的權限列表"
)
@handler getAllPermissions
get / (Authorization) returns (ListPermissionsResp)
@doc(
summary: "取得權限樹"
description: "取得以樹狀結構組織的權限列表"
)
@handler getPermissionTree
get /tree (Authorization) returns (PermissionTreeNode)
@doc(
summary: "根據 HTTP 資訊取得權限"
description: "根據 HTTP 路徑和方法取得對應的權限資訊"
)
@handler getPermissionByHTTP
post /by-http (GetPermissionByHTTPReq) returns (PermissionResp)
@doc(
summary: "展開權限"
description: "展開權限列表,包含所有父權限"
)
@handler expandPermissions
post /expand (ExpandPermissionsReq) returns (ExpandPermissionsResp)
@doc(
summary: "根據權限取得用戶"
description: "取得擁有指定權限的所有用戶 UID"
)
@handler getUsersByPermission
post /users (GetUsersByPermissionReq) returns (GetUsersByPermissionResp)
// ==================== 角色管理 ====================
@doc(
summary: "創建角色"
description: "創建一個新角色並設定權限"
)
@handler createRole
post /roles (CreateRoleReq) returns (RoleResp)
@doc(
summary: "更新角色"
description: "更新角色的名稱、狀態或權限"
)
@handler updateRole
put /roles/:uid (UpdateRoleReq) returns (RoleResp)
@doc(
summary: "刪除角色"
description: "刪除指定角色(軟刪除,設為 inactive"
)
@handler deleteRole
delete /roles/:uid (Authorization) returns (RespOK)
@doc(
summary: "取得角色"
description: "根據 UID 取得角色的詳細資訊"
)
@handler getRole
get /roles/:uid (Authorization) returns (RoleResp)
@doc(
summary: "查詢角色列表"
description: "查詢角色列表,支援多種篩選條件"
)
@handler listRoles
get /roles (ListRolesReq) returns (ListRolesResp)
@doc(
summary: "分頁查詢角色"
description: "分頁查詢角色列表,支援多種篩選條件"
)
@handler pageRoles
get /roles/page (PageRolesReq) returns (PageRolesResp)
// ==================== 角色權限管理 ====================
@doc(
summary: "取得角色權限"
description: "取得指定角色的所有權限"
)
@handler getRolePermissions
get /roles/:role_uid (Authorization) returns (GetRolePermissionsResp)
@doc(
summary: "取得用戶權限"
description: "取得指定用戶的所有權限(透過角色)"
)
@handler getUserPermissions
get /users/:user_uid (Authorization) returns (GetUserPermissionsResp)
@doc(
summary: "更新角色權限"
description: "更新指定角色的權限列表"
)
@handler updateRolePermissions
put /roles/:role_uid (UpdateRolePermissionsReq) returns (GetRolePermissionsResp)
@doc(
summary: "檢查權限"
description: "檢查當前用戶是否有執行指定 HTTP 操作的權限"
)
@handler checkPermission
post /check (CheckPermissionReq) returns (CheckPermissionResp)
// ==================== 用戶角色管理 ====================
@doc(
summary: "指派角色給用戶"
description: "為用戶指派一個角色"
)
@handler assignRole
post /users/:user_uid/roles (AssignRoleReq) returns (UserRoleResp)
@doc(
summary: "更新用戶角色"
description: "更新用戶的角色(替換現有角色)"
)
@handler updateUserRole
put /users/:user_uid/roles/:role_uid (Authorization) returns (UserRoleResp)
@doc(
summary: "移除用戶角色"
description: "移除用戶的角色"
)
@handler removeUserRole
delete /users/:user_uid/roles (Authorization) returns (RespOK)
@doc(
summary: "取得用戶角色"
description: "取得指定用戶的角色資訊"
)
@handler getUserRole
get /users/:user_uid/roles (Authorization) returns (UserRoleResp)
@doc(
summary: "取得角色的所有用戶"
description: "取得擁有指定角色的所有用戶"
)
@handler getUsersByRole
get /roles/:role_uid/users (Authorization) returns (GetUsersByRoleResp)
@doc(
summary: "查詢用戶角色列表"
description: "查詢用戶角色列表,支援多種篩選條件"
)
@handler listUserRoles
get /user-roles (ListUserRolesReq) returns (ListUserRolesResp)
}