425 lines
15 KiB
Protocol Buffer
425 lines
15 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package organize;
|
|
|
|
import "aeus/rest.proto";
|
|
import "validate/validate.proto";
|
|
import "google/protobuf/descriptor.proto";
|
|
import "google/api/annotations.proto";
|
|
|
|
option go_package = "git.nobla.cn/golang/aeis-admin/pb;pb";
|
|
|
|
// Menu 菜单模型定义
|
|
message Menu {
|
|
option (aeus.rest) = {
|
|
table: "menus"
|
|
};
|
|
int64 id = 1 [(aeus.field) = {gorm:"primaryKey",comment:"菜单ID"}];
|
|
int64 created_at = 2 [(aeus.field)={scenarios:"view;export",comment:"创建时间"}];
|
|
int64 updated_at = 3 [(aeus.field)={gorm:"index",scenarios:"view;export",comment:"更新时间"}];
|
|
string parent = 4 [(aeus.field)={gorm:"index;size:60",props:"readonly:update",live:"type:dropdown;url:/menu/level-labels",format:"menu",comment:"父级菜单"}];
|
|
string name = 5 [(aeus.field)={gorm:"index;size:60",props:"readonly:update",rule:"unique;required",comment: "组件名称"},(validate.rules).string = {max_len: 60}];
|
|
string label = 6 [(aeus.field)={gorm:"size:120",rule:"required",comment: "菜单标题"},(validate.rules).string = {max_len: 120}];
|
|
string uri = 7 [(aeus.field)={gorm:"size:512",rule:"required",scenarios:"create;update;view;export",comment: "菜单链接"},(validate.rules).string = {max_len: 512}];
|
|
string view_path = 8 [(aeus.field)={gorm:"size:512",scenarios:"create;update;view;export",comment: "视图路径"},(validate.rules).string = {max_len: 512}];
|
|
string icon = 9 [(aeus.field)={gorm:"size:60",scenarios:"create;update;view;export",comment: "菜单图标"},(validate.rules).string = {max_len: 60}];
|
|
bool hidden = 10 [(aeus.field)={scenarios:"create;update;view;export",comment:"是否隐藏"}];
|
|
bool public = 11 [(aeus.field)={scenarios:"create;update;view;export",comment:"是否公开"}];
|
|
string description = 12 [(aeus.field)={gorm:"size:1024",scenarios:"create;update;view;export;list",format:"textarea",comment: "备注说明"},(validate.rules).string = {max_len: 1024}];
|
|
int64 position = 13 [(aeus.field)={comment:"排序",scenarios:"create;update"}];
|
|
}
|
|
|
|
// Role 角色模型定义
|
|
message Role {
|
|
option (aeus.rest) = {
|
|
table: "roles"
|
|
};
|
|
int64 id = 1 [(aeus.field) = {gorm:"primaryKey",comment: "角色ID"}];
|
|
int64 created_at = 2 [(aeus.field)={scenarios:"view;export",comment:"创建时间"}];
|
|
int64 updated_at = 3 [(aeus.field)={gorm:"index",scenarios:"view;export",comment:"更新时间"}];
|
|
string name = 4 [(aeus.field)={gorm:"index;size:60",rule:"required",props:"readonly:update",comment: "角色名称"},(validate.rules).string = {max_len: 60}];
|
|
string label = 5 [(aeus.field)={gorm:"size:60",rule:"required",comment: "角色标题"},(validate.rules).string = {max_len: 60}];
|
|
string description = 6 [(aeus.field)={gorm:"size:1024",scenarios:"list;create;update;export",format:"textarea",comment: "备注说明"},(validate.rules).string = {max_len: 1024}];
|
|
}
|
|
|
|
// Permission 权限模型定义
|
|
message Permission {
|
|
option (aeus.rest) = {
|
|
table: "permissions"
|
|
};
|
|
int64 id = 1 [(aeus.field) = {gorm:"primaryKey",comment: "权限ID"}];
|
|
int64 created_at = 2 [(aeus.field)={scenarios:"view;export",comment:"创建时间"}];
|
|
int64 updated_at = 3 [(aeus.field)={gorm:"index",scenarios:"view;export",comment:"更新时间"}];
|
|
string menu = 4 [(aeus.field)={gorm:"index;size:60",format:"menu",rule:"required",comment: "所属菜单"}];
|
|
string permission = 5 [(aeus.field)={gorm:"index;size:60",rule:"required",comment: "权限名称"},(validate.rules).string = {max_len: 60}];
|
|
string label = 6 [(aeus.field)={gorm:"size:60",rule:"required",comment: "权限标题"},(validate.rules).string = {max_len: 60}];
|
|
}
|
|
|
|
// RolePermission 角色权限关联表
|
|
message RolePermission {
|
|
option (aeus.rest) = {
|
|
table: "role_permissions"
|
|
};
|
|
int64 id = 1 [(aeus.field) = {gorm:"primaryKey",comment: "ID"}];
|
|
string role = 2 [(aeus.field)={gorm:"index;size:60",rule:"required",comment: "角色"},(validate.rules).string = {max_len: 60}];
|
|
string permission = 3 [(aeus.field)={gorm:"size:60",rule:"required",comment: "权限"}];
|
|
}
|
|
|
|
// User 用户模型定义
|
|
message User {
|
|
option (aeus.rest) = {
|
|
table: "users"
|
|
};
|
|
int64 id = 1 [(aeus.field) = {gorm:"primaryKey",comment: "ID"}];
|
|
int64 created_at = 2 [(aeus.field)={scenarios:"view;export",comment:"创建时间"}];
|
|
int64 updated_at = 3 [(aeus.field)={gorm:"index",scenarios:"view;export",comment:"更新时间"}];
|
|
string uid = 4 [(aeus.field) = {gorm:"index;size:20",rule:"required;unique;regexp:^[a-zA-Z0-9]{3,8}$",props:"readonly:update",comment: "用户工号"},(validate.rules).string = {min_len: 5, max_len: 20}];
|
|
string username = 5 [(aeus.field)={gorm:"size:20",rule:"required",comment: "用户名称"},(validate.rules).string = {min_len: 5, max_len: 20}];
|
|
string role = 6 [(aeus.field)={gorm:"size:60;not null;default:''",rule:"required",format:"role",live:"type:dropdown;url:/role/labels",comment: "所属角色"},(validate.rules).string = {max_len: 60}];
|
|
bool admin = 7 [(aeus.field)={scenarios:"create",comment:"管理员"}];
|
|
string status = 8 [(aeus.field)={scenarios:"create,update,list,search",gorm:"size:20;default:normal",enum:"normal:正常;disable:禁用",comment:"状态"}];
|
|
int64 dept_id = 9 [(aeus.field) = {gorm:"not null;default:0",rule:"required",live:"type:dropdown;url:/department/labels",format:"department",comment: "所属部门"}];
|
|
string tag = 10 [ (aeus.field)={gorm:"size:60",scenarios:"list;create;update",dropdown:"created;filterable;default_first",live:"type:dropdown;url:/user/tags",comment: "用户标签"},(validate.rules).string = {max_len: 60}];
|
|
string password = 11 [(aeus.field)={gorm:"size:60",rule:"required",scenarios:"create",comment: "用户密码"},(validate.rules).string = {max_len: 60}];
|
|
string email = 12 [(aeus.field)={gorm:"size:60",scenarios:"create;update;view;list;export",comment: "用户邮箱"},(validate.rules).string = {max_len: 60}];
|
|
string avatar = 13 [(aeus.field)={gorm:"size:1024",scenarios:"view",comment: "用户头像"},(validate.rules).string = {max_len: 1024}];
|
|
string gender = 14 [(aeus.field)={gorm:"size:20;default:man",rule:"required",scenarios:"list;create;update;view;export",enum:"man:男;woman:女;other:其他",comment: "用户性别"},(validate.rules).string = {max_len: 20}];
|
|
string description = 15 [(aeus.field)={gorm:"size:1024",format:"textarea",scenarios:"create;update;view;export",comment: "备注说明"},(validate.rules).string = {max_len: 1024}];
|
|
}
|
|
|
|
// Department 部门模型定义
|
|
message Department {
|
|
option (aeus.rest) = {
|
|
table: "departments"
|
|
};
|
|
int64 id = 1 [(aeus.field) = {gorm:"primaryKey",comment:"ID"}];
|
|
int64 created_at = 2 [(aeus.field)={scenarios:"view;export",comment:"创建时间"}];
|
|
int64 updated_at = 3 [(aeus.field)={gorm:"index",scenarios:"view;export",comment:"更新时间"}];
|
|
int64 parent_id = 4 [(aeus.field)={live:"type:dropdown;url:/department/level-labels",format:"department",comment:"父级部门"}];
|
|
string name = 5 [(aeus.field)={gorm:"size:20",rule:"required",comment: "部门名称"},(validate.rules).string = {max_len: 20}];
|
|
string description = 6 [(aeus.field)={gorm:"size:1024",scenarios:"create;update;view;export;list",format:"textarea",comment: "备注说明"},(validate.rules).string = {max_len: 1024}];
|
|
}
|
|
|
|
message Login {
|
|
option (aeus.rest) = {
|
|
table: "logins"
|
|
};
|
|
int64 id = 1 [(aeus.field) = {gorm:"primaryKey",comment:"ID"}];
|
|
int64 created_at = 2 [(aeus.field)={scenarios:"list;search;view;export",comment:"登录时间"}];
|
|
string uid = 4 [(aeus.field)={gorm:"index;size:20",rule:"required",props:"readonly:update",format:"user",comment: "用户"},(validate.rules).string = {min_len: 5, max_len: 20}];
|
|
string ip = 5 [(aeus.field)={gorm:"size:128",scenarios:"list;search;view;export",comment: "登录地址"}];
|
|
string browser = 6 [(aeus.field)={gorm:"size:128",scenarios:"list;view;export",comment: "浏览器"}];
|
|
string os = 7 [(aeus.field)={gorm:"size:128",scenarios:"list;view;export",comment: "操作系统"}];
|
|
string platform = 8 [(aeus.field)={gorm:"size:128",scenarios:"list;view;export",comment: "系统平台"}];
|
|
string access_token = 9 [(aeus.field)={gorm:"size:1024",scenarios:"list;view;export",comment: "访问令牌"}];
|
|
string user_agent = 10 [(aeus.field)={gorm:"size:1024",scenarios:"list;view;export",comment: "用户代理"}];
|
|
}
|
|
|
|
message LabelValue {
|
|
string label = 1;
|
|
string value = 2;
|
|
}
|
|
|
|
message PermissionItem {
|
|
string value = 1;
|
|
string label = 2;
|
|
}
|
|
|
|
// MenuItem 菜单数据
|
|
message MenuItem {
|
|
string label = 1;
|
|
string name = 2;
|
|
string icon = 3;
|
|
bool hidden = 4;
|
|
bool public = 5;
|
|
string route = 6;
|
|
string view = 7;
|
|
repeated PermissionItem permissions = 8;
|
|
repeated MenuItem children = 9;
|
|
}
|
|
|
|
// 获取菜单的请求
|
|
message GetMenuRequest {
|
|
bool permission = 1;
|
|
}
|
|
|
|
// 获取菜单的响应
|
|
message GetMenuResponse {
|
|
repeated MenuItem data = 1;
|
|
}
|
|
|
|
|
|
// 获取用户信息
|
|
message GetProfileRequest {
|
|
string uid = 1;
|
|
}
|
|
|
|
// 获取用户信息
|
|
message GetProfileResponse {
|
|
string uid = 1;
|
|
string username = 2;
|
|
string role = 3;
|
|
string email = 4;
|
|
string avatar = 5;
|
|
bool admin = 6;
|
|
string description = 7;
|
|
}
|
|
|
|
message ResetPasswordRequest {
|
|
string uid = 1;
|
|
string old_password = 2;
|
|
string new_password = 3;
|
|
}
|
|
|
|
message ResetPasswordResponse {
|
|
string uid = 1;
|
|
}
|
|
|
|
message UpdateProfileRequest {
|
|
string uid = 1;
|
|
string username = 2;
|
|
string email = 4;
|
|
string avatar = 5;
|
|
string description = 7;
|
|
}
|
|
|
|
message UpdateProfileResponse {
|
|
string uid = 1;
|
|
}
|
|
|
|
message GetPermissionRequest {
|
|
string uid = 1;
|
|
}
|
|
|
|
message GetPermissionResponse {
|
|
string uid = 1;
|
|
repeated string permissions = 2;
|
|
}
|
|
|
|
message GetUserLabelRequest {
|
|
}
|
|
|
|
message GetUserLabelResponse {
|
|
repeated LabelValue data = 1;
|
|
}
|
|
|
|
message GetUserTagRequest {
|
|
}
|
|
|
|
message GetUserTagResponse {
|
|
repeated LabelValue data = 1;
|
|
}
|
|
|
|
// 用户服务
|
|
service UserService {
|
|
// 获取用户菜单
|
|
rpc GetMenus(GetMenuRequest) returns (GetMenuResponse) {
|
|
option (google.api.http) = {
|
|
get: "/user/menus"
|
|
};
|
|
}
|
|
// 获取用户信息
|
|
rpc GetProfile(GetProfileRequest) returns (GetProfileResponse) {
|
|
option (google.api.http) = {
|
|
get: "/user/profile"
|
|
};
|
|
}
|
|
// 更新用户信息
|
|
rpc UpdateProfile(UpdateProfileRequest) returns (UpdateProfileResponse) {
|
|
option (google.api.http) = {
|
|
put: "/user/profile"
|
|
body: "*"
|
|
};
|
|
}
|
|
// 重置用户密码
|
|
rpc ResetPassword(ResetPasswordRequest) returns (ResetPasswordResponse) {
|
|
option (google.api.http) = {
|
|
post: "/user/reset-password"
|
|
body: "*"
|
|
};
|
|
}
|
|
// 获取用户权限
|
|
rpc GetPermissions(GetPermissionRequest) returns (GetPermissionResponse) {
|
|
option (google.api.http) = {
|
|
get: "/user/permissions"
|
|
};
|
|
}
|
|
// 获取用户标签
|
|
rpc GetUserLabels(GetUserLabelRequest) returns (GetUserLabelResponse) {
|
|
option (google.api.http) = {
|
|
get: "/user/labels"
|
|
};
|
|
}
|
|
// 获取用户标签
|
|
rpc GetUserTags(GetUserTagRequest) returns (GetUserTagResponse) {
|
|
option (google.api.http) = {
|
|
get: "/user/tags"
|
|
};
|
|
}
|
|
}
|
|
|
|
|
|
message DepartmentLabelValue {
|
|
string label = 1;
|
|
int64 value = 2;
|
|
}
|
|
|
|
message DepartmentUserValue {
|
|
string label = 1;
|
|
string value = 2;
|
|
bool isuser = 3;
|
|
repeated DepartmentUserValue children = 4;
|
|
}
|
|
|
|
message GetDepartmentLabelRequest {
|
|
}
|
|
|
|
message GetDepartmentLabelResponse {
|
|
repeated DepartmentLabelValue data = 1;
|
|
}
|
|
|
|
message GetDepartmentUserRequest {
|
|
}
|
|
|
|
message GetDepartmentUserResponse {
|
|
repeated DepartmentUserValue data = 1;
|
|
}
|
|
|
|
message DepartmentLevelValue {
|
|
string label = 1;
|
|
int64 value = 2;
|
|
repeated DepartmentLevelValue children = 4;
|
|
}
|
|
|
|
message GetDepartmentLevelLabelsRequest {
|
|
}
|
|
|
|
message GetDepartmentLevelLabelsResponse {
|
|
repeated DepartmentLevelValue data = 1;
|
|
}
|
|
|
|
service DepartmentService {
|
|
// 获取部门标签
|
|
rpc GetDepartmentLabels(GetDepartmentLabelRequest) returns (GetDepartmentLabelResponse) {
|
|
option (google.api.http) = {
|
|
get: "/department/labels"
|
|
};
|
|
}
|
|
rpc GetDepartmentUsers(GetDepartmentUserRequest) returns (GetDepartmentUserResponse) {
|
|
option (google.api.http) = {
|
|
get: "/department/users"
|
|
};
|
|
}
|
|
rpc GetDepartmentLevelLabels(GetDepartmentLevelLabelsRequest) returns (GetDepartmentLevelLabelsResponse) {
|
|
option (google.api.http) = {
|
|
get: "/department/level-labels"
|
|
};
|
|
}
|
|
}
|
|
|
|
message GetRoleLabelRequest {
|
|
}
|
|
|
|
message GetRoleLabelResponse {
|
|
repeated LabelValue data = 1;
|
|
}
|
|
|
|
message GetRolePermissionRequest {
|
|
string role = 1;
|
|
}
|
|
|
|
message GetRolePermissionResponse {
|
|
string role = 1;
|
|
repeated string permissions = 2;
|
|
}
|
|
|
|
message SaveRolePermissionRequest {
|
|
string role = 1;
|
|
repeated string permissions = 2;
|
|
}
|
|
|
|
message SaveRolePermissionResponse {
|
|
string role = 1;
|
|
}
|
|
|
|
service RoleService {
|
|
// 获取角色标签
|
|
rpc GetRoleLabels(GetRoleLabelRequest) returns (GetRoleLabelResponse) {
|
|
option (google.api.http) = {
|
|
get: "/role/labels"
|
|
};
|
|
}
|
|
// 获取角色权限
|
|
rpc GetRolePermissions(GetRolePermissionRequest) returns (GetRolePermissionResponse) {
|
|
option (google.api.http) = {
|
|
get: "/role/permissions"
|
|
};
|
|
}
|
|
|
|
rpc SaveRolePermission(SaveRolePermissionRequest) returns (SaveRolePermissionResponse) {
|
|
option (google.api.http) = {
|
|
post: "/role/permissions"
|
|
body: "*"
|
|
};
|
|
}
|
|
}
|
|
|
|
message MenuLevelValue {
|
|
string label = 1;
|
|
string value = 2;
|
|
repeated MenuLevelValue children = 4;
|
|
}
|
|
|
|
message GetMenuLevelLabelsRequest {
|
|
}
|
|
|
|
message GetMenuLevelLabelsResponse {
|
|
repeated MenuLevelValue data = 1;
|
|
}
|
|
|
|
service MenuService {
|
|
rpc GetMenuLevelLabels(GetMenuLevelLabelsRequest) returns (GetMenuLevelLabelsResponse) {
|
|
option (google.api.http) = {
|
|
get: "/menu/level-labels"
|
|
};
|
|
}
|
|
}
|
|
|
|
|
|
message LoginRequest {
|
|
string username = 1;
|
|
string password = 2;
|
|
string token = 3;
|
|
}
|
|
|
|
message LoginResponse {
|
|
string uid = 1;
|
|
string username = 2;
|
|
string token = 3;
|
|
int64 expires = 4;
|
|
}
|
|
|
|
message LogoutRequest {
|
|
string token = 1;
|
|
}
|
|
|
|
message LogoutResponse {
|
|
string uid = 1;
|
|
}
|
|
|
|
// 授权服务
|
|
service AuthService {
|
|
rpc Login(LoginRequest) returns (LoginResponse) {
|
|
option (google.api.http) = {
|
|
post: "/passport/login"
|
|
body: "*"
|
|
};
|
|
}
|
|
rpc Logout(LogoutRequest) returns (LogoutResponse) {
|
|
option (google.api.http) = {
|
|
post: "/passport/logout"
|
|
body: "*"
|
|
};
|
|
}
|
|
}
|