backend/generate/api/permission.api

377 lines
13 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
}