aeus-admin/pb/organize.proto

410 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",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}];
}
// 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",props:"readonly:update",comment: "角色名称"},(validate.rules).string = {max_len: 60}];
string label = 5 [(aeus.field)={gorm:"size:60",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"}];
string menu = 2 [(aeus.field)={gorm:"index;size:60",rule:"required",comment: "所属菜单"}];
string permission = 3 [(aeus.field)={gorm:"index;size:60",rule:"required",comment: "权限名称"},(validate.rules).string = {max_len: 60}];
string label = 4 [(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)={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: "用户代理"}];
}
// Setting 参数设置表
message Setting {
option (aeus.rest) = {
table: "settings"
};
int64 id = 1 [(aeus.field) = {gorm:"primaryKey",comment:"ID"}];
int64 created_at = 2 [(aeus.field)={scenarios:"search;view;export",comment:"创建时间"}];
int64 updated_at = 3 [(aeus.field)={scenarios:"search;view;export",comment:"更新时间"}];
string name = 4 [(aeus.field)={gorm:"size:60",rule:"required",props:"readonly:update",comment: "配置项"},(validate.rules).string = {max_len: 20}];
string value = 5 [(aeus.field)={gorm:"size:512",rule:"required",format:"textarea",comment: "配置值"},(validate.rules).string = {max_len: 512}];
string description = 6 [(aeus.field)={gorm:"size:1024",format:"textarea",scenarios:"create;update;view;export",comment: "备注说明"},(validate.rules).string = {max_len: 1024}];
}
// Activity 活动记录
message Activity {
option (aeus.rest) = {
table: "activities"
};
int64 id = 1 [(aeus.field) = {gorm:"primaryKey",comment:"ID"}];
int64 created_at = 2 [(aeus.field)={scenarios:"search;search;view;export",comment:"创建时间"}];
string uid = 3 [(aeus.field)={gorm:"index;size:20",rule:"required",props:"readonly:update",format:"user",comment: "用户"},(validate.rules).string = {min_len: 5, max_len: 20}];
string action = 4 [(aeus.field)={props:"match:exactly",gorm:"index;size:20;not null;default:''",comment:"行为",enum:"create:新建#198754;update:更新#f09d00;delete:删除#e63757",scenarios:"search;list;create;update;view;export"}];
string module = 5 [(aeus.field)={gorm:"size:60;not null;default:''",comment:"模块",scenarios:"search;list;create;update;view;export"}];
string table = 6 [(aeus.field)={gorm:"size:60;not null;default:''",comment:"数据",scenarios:"list;create;update;view;export"}];
string data = 7 [(aeus.field)={gorm:"size:10240;not null;default:''",comment:"内容",scenarios:"list;create;update;view;export"}];
}
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 GetDepartmentLabelRequest {
}
message GetDepartmentLabelResponse {
repeated DepartmentLabelValue data = 1;
}
service DepartmentService {
// 获取部门标签
rpc GetDepartmentLabels(GetDepartmentLabelRequest) returns (GetDepartmentLabelResponse) {
option (google.api.http) = {
get: "/department/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 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: "*"
};
}
}
message SettingItem {
string name = 1;
string value = 2;
}
message GetSettingRequest{}
message GetSettingResponse{
repeated SettingItem data = 1;
}
service SettingService {
rpc GetSetting(GetSettingRequest) returns (GetSettingResponse) {
option (google.api.http) = {
get: "/system/setting"
};
}
}