guard/generate/protobuf/permission.proto

230 lines
6.2 KiB
Protocol Buffer
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 = "proto3";
package permission;
option go_package="./permission";
// OKResp
message OKResp {}
// NoneReq
message NoneReq {}
// AuthorizationReq 定義授權請求的結構
message AuthorizationReq {
// grant_type 表示授權類型
string grant_type = 1;
// device_id 表示設備 ID
string device_id = 2;
// scope 表示授權範圍
string scope = 3;
// data 是一個通用的 key-value 結構,用於存儲額外數據
map<string,string> data = 4;
// expires 表示過期時間
int32 expires = 5;
// is_refresh_token 表示是否為刷新令牌
bool is_refresh_token = 6;
}
// TokenResp 定義訪問令牌響應的結構
message TokenResp {
// access_token 表示訪問令牌
string access_token = 1;
// token_type 表示令牌類型
string token_type = 2;
// expires_in 表示令牌過期時間
int32 expires_in = 3;
// refresh_token 表示刷新令牌
string refresh_token = 4;
}
// CreateOneTimeTokenReq 建立一次性使用的 token,
// 要帶比較長久的 token 來,驗證後才可以
message CreateOneTimeTokenReq {
string token = 1;
}
message CreateOneTimeTokenResp {
string one_time_token = 1;
}
// RefreshTokenReq 更新 Token
message RefreshTokenReq {
string token = 1;
string scope = 2;
int64 expires = 3;
string device_id = 4;
}
// https://datatracker.ietf.org/doc/html/rfc6749#section-4.3.3
message RefreshTokenResp {
string token =1;
string one_time_token = 2;
int64 expires_in = 3;
string token_type = 4;
}
// CancelTokenReq 註銷這個 Token
message CancelTokenReq {
string token = 1;
}
// CancelTokenReq 註銷這個 Token
message DoTokenByUIDReq {
repeated string ids = 1;
string uid = 2;
}
// QueryTokenByUIDReq 拿這個UID 找 Token
message QueryTokenByUIDReq {
string uid = 1;
}
// ValidationTokenReq 驗證這個 Token
message ValidationTokenReq {
string token = 1;
}
// ValidationTokenResp 驗證以及取得 Token 詳情
message ValidationTokenResp {
Token token = 1;
map<string,string> data = 2;
}
// Token 定義令牌的結構
message Token {
// ID 表示令牌的唯一標識符
string id = 1;
// client_id 表示客戶端 ID
int32 client_id = 2;
// uid 表示用戶 ID
string uid = 3;
// device_id 表示設備 ID
string device_id = 4;
// access_token 表示訪問令牌
string access_token = 5;
// expires_in 表示訪問令牌的過期時間(秒)
int32 expires_in = 6;
// access_create_at 表示訪問令牌的創建時間
int64 access_create_at = 7;
// refresh_token 表示刷新令牌
string refresh_token = 8;
// refresh_expires_in 表示刷新令牌的過期時間(秒)
int32 refresh_expires_in = 9;
// refresh_create_at 表示刷新令牌的創建時間
int64 refresh_create_at = 10;
}
// DoTokenByDeviceIDReq 用DeviceID 來做事的
message DoTokenByDeviceIDReq {
string device_id = 1;
}
message Tokens{
repeated TokenResp token = 1;
}
message CancelOneTimeTokenReq {
repeated string token = 1;
}
// 跟 Token 相關的大小事,這次只回應錯誤,以及結果,不統一規範
// 錯誤碼應該在 Biz GW 在做回應,另外我這邊取名字比較通用,
// access_token -> token , refresh_token -> one_time_token
service TokenService {
// NewToken 建立一個新的 Token例如AccessToken
rpc NewToken(AuthorizationReq) returns(TokenResp);
// RefreshToken 更新目前的token 以及裡面包含的一次性 Token
rpc RefreshToken(RefreshTokenReq) returns(RefreshTokenResp);
// CancelToken 取消 Token也包含他裡面的 One Time Toke
rpc CancelToken(CancelTokenReq) returns(OKResp);
// ValidationToken 驗證這個 Token 有沒有效
rpc ValidationToken(ValidationTokenReq) returns(ValidationTokenResp);
// CancelTokens 取消 Token 從UID 視角,以及 token id 視角出發, UID 登出,底下所有 Device ID 也要登出, Token ID 登出, 所有 UID + Device 都要登出
rpc CancelTokens(DoTokenByUIDReq) returns(OKResp);
// CancelTokenByDeviceId 取消 Token 從 Device 視角出發可以選登出這個Device 下所有 token 登出這個Device 下指定token
rpc CancelTokenByDeviceId(DoTokenByDeviceIDReq) returns(OKResp);
// GetUserTokensByDeviceId 取得目前所對應的 DeviceID 所存在的 Tokens
rpc GetUserTokensByDeviceId(DoTokenByDeviceIDReq) returns(Tokens);
// GetUserTokensByUid 取得目前所對應的 UID 所存在的 Tokens
rpc GetUserTokensByUid(QueryTokenByUIDReq) returns(Tokens);
// NewOneTimeToken 建立一次性使用例如RefreshToken
rpc NewOneTimeToken(CreateOneTimeTokenReq) returns(CreateOneTimeTokenResp);
// CancelOneTimeToken 取消一次性使用
rpc CancelOneTimeToken(CancelOneTimeTokenReq) returns(OKResp);
}
// --------------------------------------------------------------------------------
enum PermissionStatus {
PERMISSION_STATUS_NONE = 0; // 初始(異常)
PERMISSION_STATUS_OPEN = 1;
PERMISSION_STATUS_CLOSE = 2;
}
message PermissionStatusItem {
int64 id =1;
int64 parent_id =2;
string name =3;
PermissionStatus status = 4;
bool approval = 5;
}
message ListPermissionStatusResp {
repeated PermissionStatusItem data = 1;
}
message PermissionItem{
int64 id = 1;
string name = 2;
string http_method = 3;
string http_path = 4;
optional PermissionItem parent= 5;
repeated PermissionItem children =6;
repeated int64 path_ids=7;
}
message ListPermissionResp {
repeated PermissionItem data = 1;
}
message CheckPermissionByRoleReq {
string role = 1;
string path = 2;
string method = 3;
}
message PermissionResp {
bool allow = 1;
string permission_name =2;
bool plain_code =3;
}
message GetPermissionStatusByPathReq {
string path = 2;
string method = 3;
}
service PermissionService {
// ListPermissionStatus 取得狀態
rpc ListPermissionStatus(NoneReq)returns(ListPermissionStatusResp);
// ListPermission 取得完整權限
rpc ListPermission(NoneReq)returns(ListPermissionResp);
// CheckPermissionByRole 透過角色 ID 來檢視權限
rpc CheckPermissionByRole(CheckPermissionByRoleReq)returns(PermissionResp);
// GetPermissionStatusByPath 透過資源拿取角色的狀態
rpc GetPermissionStatusByPath(GetPermissionStatusByPathReq)returns(PermissionStatusItem);
}
service RoleService {
rpc Ping(OKResp) returns(OKResp);
}