feat: add role and update role
This commit is contained in:
parent
1ad285bab1
commit
8ae8a17bbb
|
@ -19,31 +19,42 @@ type (
|
|||
CheckPermissionByRoleReq = permission.CheckPermissionByRoleReq
|
||||
CreateOneTimeTokenReq = permission.CreateOneTimeTokenReq
|
||||
CreateOneTimeTokenResp = permission.CreateOneTimeTokenResp
|
||||
CreateRoleReq = permission.CreateRoleReq
|
||||
DoTokenByDeviceIDReq = permission.DoTokenByDeviceIDReq
|
||||
DoTokenByUIDReq = permission.DoTokenByUIDReq
|
||||
GetPermissionStatusByPathReq = permission.GetPermissionStatusByPathReq
|
||||
GetRoleReq = permission.GetRoleReq
|
||||
GetRoleResp = permission.GetRoleResp
|
||||
GetUserRoleResp = permission.GetUserRoleResp
|
||||
ListPermissionResp = permission.ListPermissionResp
|
||||
ListPermissionStatusResp = permission.ListPermissionStatusResp
|
||||
MapPermissionStatusResp = permission.MapPermissionStatusResp
|
||||
NoneReq = permission.NoneReq
|
||||
OKResp = permission.OKResp
|
||||
PageResponse = permission.PageResponse
|
||||
PermissionItem = permission.PermissionItem
|
||||
PermissionResp = permission.PermissionResp
|
||||
PermissionStatusItem = permission.PermissionStatusItem
|
||||
QueryTokenByUIDReq = permission.QueryTokenByUIDReq
|
||||
RefreshTokenReq = permission.RefreshTokenReq
|
||||
RefreshTokenResp = permission.RefreshTokenResp
|
||||
RoleResp = permission.RoleResp
|
||||
Token = permission.Token
|
||||
TokenResp = permission.TokenResp
|
||||
Tokens = permission.Tokens
|
||||
UpdateRoleReq = permission.UpdateRoleReq
|
||||
UserPermissionReq = permission.UserPermissionReq
|
||||
UserPermissionResp = permission.UserPermissionResp
|
||||
UserRoleReq = permission.UserRoleReq
|
||||
UserRoleResp = permission.UserRoleResp
|
||||
ValidationTokenReq = permission.ValidationTokenReq
|
||||
ValidationTokenResp = permission.ValidationTokenResp
|
||||
|
||||
PermissionService interface {
|
||||
// ListPermissionStatus 取得所有權限狀態列表,給前端表演用
|
||||
ListPermissionStatus(ctx context.Context, in *NoneReq, opts ...grpc.CallOption) (*ListPermissionStatusResp, error)
|
||||
// MapPermissionStatus 取得所有權限開閉狀態,簡易版,給前端表演用
|
||||
MapPermissionStatus(ctx context.Context, in *NoneReq, opts ...grpc.CallOption) (*MapPermissionStatusResp, error)
|
||||
// ListPermission 一次性取得所有權限表
|
||||
ListPermission(ctx context.Context, in *NoneReq, opts ...grpc.CallOption) (*MapPermissionStatusResp, error)
|
||||
// CheckPermissionByRole 透過角色 ID 來檢視權限,後台要通過時真的看這個
|
||||
CheckPermissionByRole(ctx context.Context, in *CheckPermissionByRoleReq, opts ...grpc.CallOption) (*PermissionResp, error)
|
||||
// GetPermissionStatusByPath 透過資源拿取角色的狀態
|
||||
|
@ -67,10 +78,10 @@ func (m *defaultPermissionService) ListPermissionStatus(ctx context.Context, in
|
|||
return client.ListPermissionStatus(ctx, in, opts...)
|
||||
}
|
||||
|
||||
// MapPermissionStatus 取得所有權限開閉狀態,簡易版,給前端表演用
|
||||
func (m *defaultPermissionService) MapPermissionStatus(ctx context.Context, in *NoneReq, opts ...grpc.CallOption) (*MapPermissionStatusResp, error) {
|
||||
// ListPermission 一次性取得所有權限表
|
||||
func (m *defaultPermissionService) ListPermission(ctx context.Context, in *NoneReq, opts ...grpc.CallOption) (*MapPermissionStatusResp, error) {
|
||||
client := permission.NewPermissionServiceClient(m.cli.Conn())
|
||||
return client.MapPermissionStatus(ctx, in, opts...)
|
||||
return client.ListPermission(ctx, in, opts...)
|
||||
}
|
||||
|
||||
// CheckPermissionByRole 透過角色 ID 來檢視權限,後台要通過時真的看這個
|
||||
|
|
|
@ -19,28 +19,44 @@ type (
|
|||
CheckPermissionByRoleReq = permission.CheckPermissionByRoleReq
|
||||
CreateOneTimeTokenReq = permission.CreateOneTimeTokenReq
|
||||
CreateOneTimeTokenResp = permission.CreateOneTimeTokenResp
|
||||
CreateRoleReq = permission.CreateRoleReq
|
||||
DoTokenByDeviceIDReq = permission.DoTokenByDeviceIDReq
|
||||
DoTokenByUIDReq = permission.DoTokenByUIDReq
|
||||
GetPermissionStatusByPathReq = permission.GetPermissionStatusByPathReq
|
||||
GetRoleReq = permission.GetRoleReq
|
||||
GetRoleResp = permission.GetRoleResp
|
||||
GetUserRoleResp = permission.GetUserRoleResp
|
||||
ListPermissionResp = permission.ListPermissionResp
|
||||
ListPermissionStatusResp = permission.ListPermissionStatusResp
|
||||
MapPermissionStatusResp = permission.MapPermissionStatusResp
|
||||
NoneReq = permission.NoneReq
|
||||
OKResp = permission.OKResp
|
||||
PageResponse = permission.PageResponse
|
||||
PermissionItem = permission.PermissionItem
|
||||
PermissionResp = permission.PermissionResp
|
||||
PermissionStatusItem = permission.PermissionStatusItem
|
||||
QueryTokenByUIDReq = permission.QueryTokenByUIDReq
|
||||
RefreshTokenReq = permission.RefreshTokenReq
|
||||
RefreshTokenResp = permission.RefreshTokenResp
|
||||
RoleResp = permission.RoleResp
|
||||
Token = permission.Token
|
||||
TokenResp = permission.TokenResp
|
||||
Tokens = permission.Tokens
|
||||
UpdateRoleReq = permission.UpdateRoleReq
|
||||
UserPermissionReq = permission.UserPermissionReq
|
||||
UserPermissionResp = permission.UserPermissionResp
|
||||
UserRoleReq = permission.UserRoleReq
|
||||
UserRoleResp = permission.UserRoleResp
|
||||
ValidationTokenReq = permission.ValidationTokenReq
|
||||
ValidationTokenResp = permission.ValidationTokenResp
|
||||
|
||||
RoleService interface {
|
||||
Ping(ctx context.Context, in *OKResp, opts ...grpc.CallOption) (*OKResp, error)
|
||||
// CreateRole 建立角色
|
||||
CreateRole(ctx context.Context, in *CreateRoleReq, opts ...grpc.CallOption) (*RoleResp, error)
|
||||
// GetRole 取得搜尋的角色
|
||||
GetRole(ctx context.Context, in *GetRoleReq, opts ...grpc.CallOption) (*GetRoleResp, error)
|
||||
// UpdateRole 更新角色
|
||||
UpdateRole(ctx context.Context, in *UpdateRoleReq, opts ...grpc.CallOption) (*RoleResp, error)
|
||||
}
|
||||
|
||||
defaultRoleService struct {
|
||||
|
@ -54,7 +70,20 @@ func NewRoleService(cli zrpc.Client) RoleService {
|
|||
}
|
||||
}
|
||||
|
||||
func (m *defaultRoleService) Ping(ctx context.Context, in *OKResp, opts ...grpc.CallOption) (*OKResp, error) {
|
||||
// CreateRole 建立角色
|
||||
func (m *defaultRoleService) CreateRole(ctx context.Context, in *CreateRoleReq, opts ...grpc.CallOption) (*RoleResp, error) {
|
||||
client := permission.NewRoleServiceClient(m.cli.Conn())
|
||||
return client.Ping(ctx, in, opts...)
|
||||
return client.CreateRole(ctx, in, opts...)
|
||||
}
|
||||
|
||||
// GetRole 取得搜尋的角色
|
||||
func (m *defaultRoleService) GetRole(ctx context.Context, in *GetRoleReq, opts ...grpc.CallOption) (*GetRoleResp, error) {
|
||||
client := permission.NewRoleServiceClient(m.cli.Conn())
|
||||
return client.GetRole(ctx, in, opts...)
|
||||
}
|
||||
|
||||
// UpdateRole 更新角色
|
||||
func (m *defaultRoleService) UpdateRole(ctx context.Context, in *UpdateRoleReq, opts ...grpc.CallOption) (*RoleResp, error) {
|
||||
client := permission.NewRoleServiceClient(m.cli.Conn())
|
||||
return client.UpdateRole(ctx, in, opts...)
|
||||
}
|
||||
|
|
|
@ -19,23 +19,34 @@ type (
|
|||
CheckPermissionByRoleReq = permission.CheckPermissionByRoleReq
|
||||
CreateOneTimeTokenReq = permission.CreateOneTimeTokenReq
|
||||
CreateOneTimeTokenResp = permission.CreateOneTimeTokenResp
|
||||
CreateRoleReq = permission.CreateRoleReq
|
||||
DoTokenByDeviceIDReq = permission.DoTokenByDeviceIDReq
|
||||
DoTokenByUIDReq = permission.DoTokenByUIDReq
|
||||
GetPermissionStatusByPathReq = permission.GetPermissionStatusByPathReq
|
||||
GetRoleReq = permission.GetRoleReq
|
||||
GetRoleResp = permission.GetRoleResp
|
||||
GetUserRoleResp = permission.GetUserRoleResp
|
||||
ListPermissionResp = permission.ListPermissionResp
|
||||
ListPermissionStatusResp = permission.ListPermissionStatusResp
|
||||
MapPermissionStatusResp = permission.MapPermissionStatusResp
|
||||
NoneReq = permission.NoneReq
|
||||
OKResp = permission.OKResp
|
||||
PageResponse = permission.PageResponse
|
||||
PermissionItem = permission.PermissionItem
|
||||
PermissionResp = permission.PermissionResp
|
||||
PermissionStatusItem = permission.PermissionStatusItem
|
||||
QueryTokenByUIDReq = permission.QueryTokenByUIDReq
|
||||
RefreshTokenReq = permission.RefreshTokenReq
|
||||
RefreshTokenResp = permission.RefreshTokenResp
|
||||
RoleResp = permission.RoleResp
|
||||
Token = permission.Token
|
||||
TokenResp = permission.TokenResp
|
||||
Tokens = permission.Tokens
|
||||
UpdateRoleReq = permission.UpdateRoleReq
|
||||
UserPermissionReq = permission.UserPermissionReq
|
||||
UserPermissionResp = permission.UserPermissionResp
|
||||
UserRoleReq = permission.UserRoleReq
|
||||
UserRoleResp = permission.UserRoleResp
|
||||
ValidationTokenReq = permission.ValidationTokenReq
|
||||
ValidationTokenResp = permission.ValidationTokenResp
|
||||
|
||||
|
|
|
@ -0,0 +1,97 @@
|
|||
// Code generated by goctl. DO NOT EDIT.
|
||||
// Source: permission.proto
|
||||
|
||||
package userroleservice
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"ark-permission/gen_result/pb/permission"
|
||||
|
||||
"github.com/zeromicro/go-zero/zrpc"
|
||||
"google.golang.org/grpc"
|
||||
)
|
||||
|
||||
type (
|
||||
AuthorizationReq = permission.AuthorizationReq
|
||||
CancelOneTimeTokenReq = permission.CancelOneTimeTokenReq
|
||||
CancelTokenReq = permission.CancelTokenReq
|
||||
CheckPermissionByRoleReq = permission.CheckPermissionByRoleReq
|
||||
CreateOneTimeTokenReq = permission.CreateOneTimeTokenReq
|
||||
CreateOneTimeTokenResp = permission.CreateOneTimeTokenResp
|
||||
CreateRoleReq = permission.CreateRoleReq
|
||||
DoTokenByDeviceIDReq = permission.DoTokenByDeviceIDReq
|
||||
DoTokenByUIDReq = permission.DoTokenByUIDReq
|
||||
GetPermissionStatusByPathReq = permission.GetPermissionStatusByPathReq
|
||||
GetRoleReq = permission.GetRoleReq
|
||||
GetRoleResp = permission.GetRoleResp
|
||||
GetUserRoleResp = permission.GetUserRoleResp
|
||||
ListPermissionResp = permission.ListPermissionResp
|
||||
ListPermissionStatusResp = permission.ListPermissionStatusResp
|
||||
MapPermissionStatusResp = permission.MapPermissionStatusResp
|
||||
NoneReq = permission.NoneReq
|
||||
OKResp = permission.OKResp
|
||||
PageResponse = permission.PageResponse
|
||||
PermissionItem = permission.PermissionItem
|
||||
PermissionResp = permission.PermissionResp
|
||||
PermissionStatusItem = permission.PermissionStatusItem
|
||||
QueryTokenByUIDReq = permission.QueryTokenByUIDReq
|
||||
RefreshTokenReq = permission.RefreshTokenReq
|
||||
RefreshTokenResp = permission.RefreshTokenResp
|
||||
RoleResp = permission.RoleResp
|
||||
Token = permission.Token
|
||||
TokenResp = permission.TokenResp
|
||||
Tokens = permission.Tokens
|
||||
UpdateRoleReq = permission.UpdateRoleReq
|
||||
UserPermissionReq = permission.UserPermissionReq
|
||||
UserPermissionResp = permission.UserPermissionResp
|
||||
UserRoleReq = permission.UserRoleReq
|
||||
UserRoleResp = permission.UserRoleResp
|
||||
ValidationTokenReq = permission.ValidationTokenReq
|
||||
ValidationTokenResp = permission.ValidationTokenResp
|
||||
|
||||
UserRoleService interface {
|
||||
// CreateUserRole 建立角色
|
||||
CreateUserRole(ctx context.Context, in *UserRoleReq, opts ...grpc.CallOption) (*UserRoleResp, error)
|
||||
// UpdateRole 更新角色
|
||||
UpdateUserRole(ctx context.Context, in *UserRoleReq, opts ...grpc.CallOption) (*UserRoleResp, error)
|
||||
// GetUserRole 取得角色綁定表,沒有搜尋條件就全部,不分頁
|
||||
GetUserRole(ctx context.Context, in *UserRoleReq, opts ...grpc.CallOption) (*GetUserRoleResp, error)
|
||||
// GetUserPermission 取得角色權限
|
||||
GetUserPermission(ctx context.Context, in *UserPermissionReq, opts ...grpc.CallOption) (*UserPermissionResp, error)
|
||||
}
|
||||
|
||||
defaultUserRoleService struct {
|
||||
cli zrpc.Client
|
||||
}
|
||||
)
|
||||
|
||||
func NewUserRoleService(cli zrpc.Client) UserRoleService {
|
||||
return &defaultUserRoleService{
|
||||
cli: cli,
|
||||
}
|
||||
}
|
||||
|
||||
// CreateUserRole 建立角色
|
||||
func (m *defaultUserRoleService) CreateUserRole(ctx context.Context, in *UserRoleReq, opts ...grpc.CallOption) (*UserRoleResp, error) {
|
||||
client := permission.NewUserRoleServiceClient(m.cli.Conn())
|
||||
return client.CreateUserRole(ctx, in, opts...)
|
||||
}
|
||||
|
||||
// UpdateRole 更新角色
|
||||
func (m *defaultUserRoleService) UpdateUserRole(ctx context.Context, in *UserRoleReq, opts ...grpc.CallOption) (*UserRoleResp, error) {
|
||||
client := permission.NewUserRoleServiceClient(m.cli.Conn())
|
||||
return client.UpdateUserRole(ctx, in, opts...)
|
||||
}
|
||||
|
||||
// GetUserRole 取得角色綁定表,沒有搜尋條件就全部,不分頁
|
||||
func (m *defaultUserRoleService) GetUserRole(ctx context.Context, in *UserRoleReq, opts ...grpc.CallOption) (*GetUserRoleResp, error) {
|
||||
client := permission.NewUserRoleServiceClient(m.cli.Conn())
|
||||
return client.GetUserRole(ctx, in, opts...)
|
||||
}
|
||||
|
||||
// GetUserPermission 取得角色權限
|
||||
func (m *defaultUserRoleService) GetUserPermission(ctx context.Context, in *UserPermissionReq, opts ...grpc.CallOption) (*UserPermissionResp, error) {
|
||||
client := permission.NewUserRoleServiceClient(m.cli.Conn())
|
||||
return client.GetUserPermission(ctx, in, opts...)
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
DROP TABLE IF EXISTS `role`;
|
|
@ -0,0 +1,12 @@
|
|||
CREATE TABLE `role`
|
||||
(
|
||||
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK',
|
||||
`role_id` varchar(50) NOT NULL,
|
||||
`display_name` varchar(255) NOT NULL COMMENT '名稱',
|
||||
`status` tinyint NOT NULL DEFAULT '1' COMMENT '狀態 1: 啟用, 2: 禁用',
|
||||
`create_time` bigint DEFAULT 0 NOT NULL COMMENT '創建時間',
|
||||
`update_time` bigint DEFAULT 0 NOT NULL COMMENT '更新時間',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uid_unique_key` (`role_id`),
|
||||
UNIQUE KEY `name_unique_key` (`display_name`)
|
||||
) ENGINE = InnoDB COMMENT ='角色';
|
|
@ -0,0 +1 @@
|
|||
DROP TABLE IF EXISTS `user_role`;
|
|
@ -0,0 +1,12 @@
|
|||
CREATE TABLE `user_role`
|
||||
(
|
||||
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK',
|
||||
`brand` varchar(50) DEFAULT '' NOT NULL COMMENT '',
|
||||
`uid` varchar(50) NOT NULL,
|
||||
`role_id` varchar(50) NOT NULL,
|
||||
`status` tinyint NOT NULL DEFAULT '1' COMMENT '狀態 1: 啟用, 2: 禁用',
|
||||
`create_time` bigint DEFAULT 0 NOT NULL COMMENT '創建時間',
|
||||
`update_time` bigint DEFAULT 0 NOT NULL COMMENT '更新時間',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uid_unique_key` (`uid`)
|
||||
) ENGINE = InnoDB COMMENT ='會員角色';
|
|
@ -0,0 +1 @@
|
|||
DROP TABLE IF EXISTS `role_permission`;
|
|
@ -0,0 +1,10 @@
|
|||
CREATE TABLE `role_permission`
|
||||
(
|
||||
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK',
|
||||
`role_id` bigint unsigned DEFAULT NULL COMMENT 'role.id',
|
||||
`permission_id` bigint unsigned DEFAULT NULL COMMENT 'permission.id',
|
||||
`create_time` bigint DEFAULT 0 NOT NULL COMMENT '創建時間',
|
||||
`update_time` bigint DEFAULT 0 NOT NULL COMMENT '更新時間',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `category_id_permission_id_index` (`role_id`, `permission_id`)
|
||||
) ENGINE = InnoDB COMMENT ='角色權限';
|
|
@ -0,0 +1 @@
|
|||
DELETE FROM `role` WHERE (`role_id` = 'AM000000');
|
|
@ -0,0 +1,3 @@
|
|||
INSERT INTO `role` (`role_id`, `display_name`, `status`, `create_time`, `update_time`)
|
||||
VALUES ('AM000000', 'admin', 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
|
||||
('AM000001', 'visitor', 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
|
|
@ -227,8 +227,99 @@ service PermissionService {
|
|||
}
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------------
|
||||
|
||||
service RoleService {
|
||||
rpc Ping(OKResp) returns(OKResp);
|
||||
message GetRoleReq{
|
||||
string role_ids =1;
|
||||
string display_name=2;
|
||||
repeated string permissions=3;
|
||||
PermissionStatus status=4;
|
||||
int64 page_index=5;
|
||||
int64 page_size=6;
|
||||
bool all=7;
|
||||
}
|
||||
|
||||
// RoleResp 對應的 Protobuf message
|
||||
message RoleResp {
|
||||
int64 id = 1; // ID
|
||||
string display_name = 2; // name
|
||||
string role_id = 3; // role_id -> 看得懂,自定義的,不會像 int64 這種比較不確定不好操作
|
||||
map<string, string> permissions = 4; // permissions
|
||||
PermissionStatus status = 5; // status
|
||||
int64 create_time = 6; // create_time
|
||||
int64 update_time = 7; // update_time
|
||||
}
|
||||
|
||||
// 定義 PageResponse 用來對應 pager.Response
|
||||
message PageResponse {
|
||||
int32 page_index = 1; // 頁碼
|
||||
int32 page_size = 2; // 每頁顯示數量
|
||||
int32 total_pages = 3; // 總頁數
|
||||
}
|
||||
|
||||
// PageRoleResp 對應的 Protobuf message
|
||||
message GetRoleResp {
|
||||
repeated RoleResp list = 1; // list
|
||||
PageResponse page = 2; // page
|
||||
}
|
||||
|
||||
message CreateRoleReq{
|
||||
string display_name=1;
|
||||
PermissionStatus status = 2; // status
|
||||
string role_id =3;
|
||||
}
|
||||
|
||||
message UpdateRoleReq{
|
||||
string role_id =1; // 搜尋條件
|
||||
PermissionStatus status = 2; // status
|
||||
string display_name =3;
|
||||
}
|
||||
|
||||
// RoleService 建立所有的角色
|
||||
service RoleService {
|
||||
// CreateRole 建立角色
|
||||
rpc CreateRole(CreateRoleReq)returns(RoleResp);
|
||||
// GetRole 取得搜尋的角色
|
||||
rpc GetRole(GetRoleReq)returns(GetRoleResp);
|
||||
// UpdateRole 更新角色
|
||||
rpc UpdateRole(UpdateRoleReq)returns(RoleResp);
|
||||
}
|
||||
|
||||
message UserRoleReq{
|
||||
string uid =1;
|
||||
string role_id =2;
|
||||
}
|
||||
|
||||
message UserRoleResp{
|
||||
string uid =1;
|
||||
string role_id =2;
|
||||
int64 create_time = 3; // create_time
|
||||
int64 update_time = 4; // update_time
|
||||
}
|
||||
|
||||
message GetUserRoleResp{
|
||||
repeated UpdateRoleReq list=1;
|
||||
}
|
||||
|
||||
message UserPermissionReq{
|
||||
string uid =1;
|
||||
}
|
||||
message UserPermissionResp{
|
||||
string role_id =1;
|
||||
map<string, string> permissions = 2; // permissions
|
||||
}
|
||||
|
||||
// UserRoleService 綁定角色與權限
|
||||
service UserRoleService {
|
||||
// CreateUserRole 建立角色
|
||||
rpc CreateUserRole(UserRoleReq)returns(UserRoleResp);
|
||||
// UpdateRole 更新角色
|
||||
rpc UpdateUserRole(UserRoleReq)returns(UserRoleResp);
|
||||
// GetUserRole 取得角色綁定表,沒有搜尋條件就全部,不分頁
|
||||
rpc GetUserRole(UserRoleReq)returns(GetUserRoleResp);
|
||||
// GetUserPermission 取得角色權限
|
||||
rpc GetUserPermission(UserPermissionReq)returns(UserPermissionResp);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
package entity
|
||||
|
||||
import "ark-permission/internal/domain"
|
||||
|
||||
type Role struct {
|
||||
ID int64 `gorm:"column:id"`
|
||||
RoleID string `gorm:"column:role_id"`
|
||||
DisplayName string `gorm:"column:display_name"`
|
||||
Status int `gorm:"column:status"`
|
||||
Permissions domain.Permissions `gorm:"-"`
|
||||
CreateTime int64 `gorm:"column:create_time;autoCreateTime"`
|
||||
UpdateTime int64 `gorm:"column:update_time;autoUpdateTime"`
|
||||
}
|
||||
|
||||
func (c *Role) TableName() string {
|
||||
return "role"
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package entity
|
||||
|
||||
import "ark-permission/internal/domain"
|
||||
|
||||
type RoleLog struct {
|
||||
ID string `json:"id,omitempty"`
|
||||
Before AlterRoleLog `json:"before"`
|
||||
After AlterRoleLog `json:"after"`
|
||||
Name string `json:"name"`
|
||||
UID string `json:"uid"`
|
||||
UpdateUserUID string `json:"update_user_uid"`
|
||||
UpdateUserName string `json:"update_user_name"`
|
||||
CreateTime int64 `json:"create_time"`
|
||||
Version string `json:"ver"`
|
||||
}
|
||||
|
||||
type AlterRoleLog struct {
|
||||
Permissions []AlterPermission `json:"permissions"`
|
||||
Status int `json:"status"`
|
||||
}
|
||||
|
||||
type AlterPermission struct {
|
||||
Name string `json:"name"`
|
||||
Status domain.PermissionStatus `json:"status"`
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
package entity
|
||||
|
||||
type UserRole struct {
|
||||
ID int64 `gorm:"column:id"`
|
||||
Brand string `gorm:"column:brand"`
|
||||
UID string `gorm:"column:uid"`
|
||||
RoleID string `gorm:"column:role_id"`
|
||||
Status int `gorm:"column:status"`
|
||||
CreateTime int64 `gorm:"column:create_time;autoCreateTime"`
|
||||
UpdateTime int64 `gorm:"column:update_time;autoUpdateTime"`
|
||||
}
|
||||
|
||||
func (c *UserRole) TableName() string {
|
||||
return "user_role"
|
||||
}
|
||||
|
||||
type RoleUserCount struct {
|
||||
RoleID string `gorm:"column:role_id"`
|
||||
Count int `gorm:"column:count"`
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
package permissionservicelogic
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"ark-permission/gen_result/pb/permission"
|
||||
"ark-permission/internal/svc"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type ListPermissionLogic struct {
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
logx.Logger
|
||||
}
|
||||
|
||||
func NewListPermissionLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ListPermissionLogic {
|
||||
return &ListPermissionLogic{
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
Logger: logx.WithContext(ctx),
|
||||
}
|
||||
}
|
||||
|
||||
// ListPermission 一次性取得所有權限表
|
||||
func (l *ListPermissionLogic) ListPermission(in *permission.NoneReq) (*permission.MapPermissionStatusResp, error) {
|
||||
// todo: add your logic here and delete this line
|
||||
|
||||
return &permission.MapPermissionStatusResp{}, nil
|
||||
}
|
|
@ -0,0 +1,84 @@
|
|||
package roleservicelogic
|
||||
|
||||
import (
|
||||
"ark-permission/internal/model"
|
||||
ers "code.30cm.net/wanderland/library-go/errors"
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"ark-permission/gen_result/pb/permission"
|
||||
"ark-permission/internal/svc"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type CreateRoleLogic struct {
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
logx.Logger
|
||||
}
|
||||
|
||||
func NewCreateRoleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateRoleLogic {
|
||||
return &CreateRoleLogic{
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
Logger: logx.WithContext(ctx),
|
||||
}
|
||||
}
|
||||
|
||||
type createRoleReq struct {
|
||||
Status string `json:"status" binding:"required"`
|
||||
RoleID string `json:"role_id"`
|
||||
DisplayName string `json:"display_name" binding:"required"`
|
||||
}
|
||||
|
||||
// CreateRole 建立角色
|
||||
func (l *CreateRoleLogic) CreateRole(in *permission.CreateRoleReq) (*permission.RoleResp, error) {
|
||||
// 驗證所需
|
||||
if err := l.svcCtx.Validate.ValidateAll(&createRoleReq{
|
||||
Status: in.GetStatus().String(),
|
||||
DisplayName: in.GetDisplayName(),
|
||||
}); err != nil {
|
||||
return nil, ers.InvalidFormat(err.Error())
|
||||
}
|
||||
|
||||
// 有操作失敗風險,因為如果並行狀態下有可能撞到產生的 role_id 一樣,不過此時有在表當中,擋 UK ,發生機率小,請使用者重試即可
|
||||
roleID, err := l.svcCtx.RoleRepo.IncrementID(l.ctx)
|
||||
if err != nil {
|
||||
return nil, ers.DBError("[permission.CreateRole] failed to get IncrementID", err.Error())
|
||||
}
|
||||
|
||||
rid := in.GetRoleId()
|
||||
if rid == "" {
|
||||
rid = fmt.Sprintf("AM%06d", roleID)
|
||||
}
|
||||
|
||||
now := time.Now().UTC()
|
||||
data := model.Role{
|
||||
RoleId: rid,
|
||||
DisplayName: in.GetDisplayName(),
|
||||
Status: int64(in.GetStatus().Number()),
|
||||
CreateTime: now.Unix(),
|
||||
UpdateTime: now.Unix(),
|
||||
}
|
||||
|
||||
res, err := l.svcCtx.RoleRepo.Insert(l.ctx, &data)
|
||||
if err != nil {
|
||||
return nil, ers.DBError("[RoleRepo.Insert] failed to insert role data", err.Error())
|
||||
}
|
||||
|
||||
lastID, err := res.LastInsertId()
|
||||
if err != nil {
|
||||
lastID = 0
|
||||
}
|
||||
|
||||
return &permission.RoleResp{
|
||||
Id: lastID,
|
||||
DisplayName: data.DisplayName,
|
||||
RoleId: data.RoleId,
|
||||
Status: permission.PermissionStatus(data.Status),
|
||||
CreateTime: data.CreateTime,
|
||||
UpdateTime: data.UpdateTime,
|
||||
}, nil
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
package roleservicelogic
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"ark-permission/gen_result/pb/permission"
|
||||
"ark-permission/internal/svc"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type GetRoleLogic struct {
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
logx.Logger
|
||||
}
|
||||
|
||||
func NewGetRoleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetRoleLogic {
|
||||
return &GetRoleLogic{
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
Logger: logx.WithContext(ctx),
|
||||
}
|
||||
}
|
||||
|
||||
// GetRole 取得搜尋的角色
|
||||
func (l *GetRoleLogic) GetRole(in *permission.GetRoleReq) (*permission.GetRoleResp, error) {
|
||||
// filter := data *Role
|
||||
// 是否全表搜尋
|
||||
if in.GetAll() {
|
||||
// 不需要帶過濾條件
|
||||
|
||||
}
|
||||
|
||||
// RoleIds string `protobuf:"bytes,1,opt,name=role_ids,json=roleIds,proto3" json:"role_ids,omitempty"`
|
||||
// DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
|
||||
// Permissions []string `protobuf:"bytes,3,rep,name=permissions,proto3" json:"permissions,omitempty"`
|
||||
// Status PermissionStatus `protobuf:"varint,4,opt,name=status,proto3,enum=permission.PermissionStatus" json:"status,omitempty"`
|
||||
// PageIndex int64 `protobuf:"varint,5,opt,name=page_index,json=pageIndex,proto3" json:"page_index,omitempty"`
|
||||
// PageSize int64 `protobuf:"varint,6,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
|
||||
|
||||
return &permission.GetRoleResp{}, nil
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
package roleservicelogic
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"ark-permission/gen_result/pb/permission"
|
||||
"ark-permission/internal/svc"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type PingLogic struct {
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
logx.Logger
|
||||
}
|
||||
|
||||
func NewPingLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PingLogic {
|
||||
return &PingLogic{
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
Logger: logx.WithContext(ctx),
|
||||
}
|
||||
}
|
||||
|
||||
func (l *PingLogic) Ping(in *permission.OKResp) (*permission.OKResp, error) {
|
||||
// todo: add your logic here and delete this line
|
||||
|
||||
return &permission.OKResp{}, nil
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
package roleservicelogic
|
||||
|
||||
import (
|
||||
ers "code.30cm.net/wanderland/library-go/errors"
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
|
||||
"ark-permission/gen_result/pb/permission"
|
||||
"ark-permission/internal/svc"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type UpdateRoleLogic struct {
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
logx.Logger
|
||||
}
|
||||
|
||||
func NewUpdateRoleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpdateRoleLogic {
|
||||
return &UpdateRoleLogic{
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
Logger: logx.WithContext(ctx),
|
||||
}
|
||||
}
|
||||
|
||||
// UpdateRole 更新角色
|
||||
func (l *UpdateRoleLogic) UpdateRole(in *permission.UpdateRoleReq) (*permission.RoleResp, error) {
|
||||
if in.GetRoleId() == "" {
|
||||
return nil, ers.InvalidFormat("failed to get role id")
|
||||
}
|
||||
|
||||
// 暴露出 transaction 的統包,可以實現跨表跟同表
|
||||
err := l.svcCtx.Conn.TransactCtx(l.ctx, func(ctx context.Context, session sqlx.Session) error {
|
||||
if in.GetStatus() != 0 {
|
||||
if in.GetStatus() == permission.PermissionStatus_PERMISSION_STATUS_NONE {
|
||||
return fmt.Errorf("failed to get role id")
|
||||
}
|
||||
err := l.svcCtx.RoleRepo.TransUpdateStatusByRoleID(
|
||||
ctx, session, int64(in.GetStatus().Number()), in.GetRoleId())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if in.GetDisplayName() != "" {
|
||||
err := l.svcCtx.RoleRepo.TransUpdateDisplayNameByRoleID(
|
||||
ctx, session, in.GetDisplayName(), in.GetRoleId())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return nil, ers.DBError(err.Error())
|
||||
}
|
||||
|
||||
result, err := l.svcCtx.RoleRepo.FindOneByRoleId(l.ctx, in.GetRoleId())
|
||||
if err != nil {
|
||||
return nil, ers.DBError(err.Error())
|
||||
}
|
||||
|
||||
return &permission.RoleResp{
|
||||
Id: result.Id,
|
||||
Status: permission.PermissionStatus(result.Status),
|
||||
DisplayName: result.DisplayName,
|
||||
RoleId: result.RoleId,
|
||||
CreateTime: result.CreateTime,
|
||||
UpdateTime: result.UpdateTime,
|
||||
}, nil
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
package userroleservicelogic
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"ark-permission/gen_result/pb/permission"
|
||||
"ark-permission/internal/svc"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type CreateUserRoleLogic struct {
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
logx.Logger
|
||||
}
|
||||
|
||||
func NewCreateUserRoleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateUserRoleLogic {
|
||||
return &CreateUserRoleLogic{
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
Logger: logx.WithContext(ctx),
|
||||
}
|
||||
}
|
||||
|
||||
// CreateUserRole 建立角色
|
||||
func (l *CreateUserRoleLogic) CreateUserRole(in *permission.UserRoleReq) (*permission.UserRoleResp, error) {
|
||||
// todo: add your logic here and delete this line
|
||||
|
||||
return &permission.UserRoleResp{}, nil
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
package userroleservicelogic
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"ark-permission/gen_result/pb/permission"
|
||||
"ark-permission/internal/svc"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type GetUserPermissionLogic struct {
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
logx.Logger
|
||||
}
|
||||
|
||||
func NewGetUserPermissionLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetUserPermissionLogic {
|
||||
return &GetUserPermissionLogic{
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
Logger: logx.WithContext(ctx),
|
||||
}
|
||||
}
|
||||
|
||||
// GetUserPermission 取得角色權限
|
||||
func (l *GetUserPermissionLogic) GetUserPermission(in *permission.UserPermissionReq) (*permission.UserPermissionResp, error) {
|
||||
// todo: add your logic here and delete this line
|
||||
|
||||
return &permission.UserPermissionResp{}, nil
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
package userroleservicelogic
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"ark-permission/gen_result/pb/permission"
|
||||
"ark-permission/internal/svc"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type GetUserRoleLogic struct {
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
logx.Logger
|
||||
}
|
||||
|
||||
func NewGetUserRoleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetUserRoleLogic {
|
||||
return &GetUserRoleLogic{
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
Logger: logx.WithContext(ctx),
|
||||
}
|
||||
}
|
||||
|
||||
// GetUserRole 取得角色綁定表,沒有搜尋條件就全部,不分頁
|
||||
func (l *GetUserRoleLogic) GetUserRole(in *permission.UserRoleReq) (*permission.GetUserRoleResp, error) {
|
||||
|
||||
return &permission.GetUserRoleResp{}, nil
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
package userroleservicelogic
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"ark-permission/gen_result/pb/permission"
|
||||
"ark-permission/internal/svc"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type UpdateUserRoleLogic struct {
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
logx.Logger
|
||||
}
|
||||
|
||||
func NewUpdateUserRoleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpdateUserRoleLogic {
|
||||
return &UpdateUserRoleLogic{
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
Logger: logx.WithContext(ctx),
|
||||
}
|
||||
}
|
||||
|
||||
// UpdateRole 更新角色
|
||||
func (l *UpdateUserRoleLogic) UpdateUserRole(in *permission.UserRoleReq) (*permission.UserRoleResp, error) {
|
||||
// todo: add your logic here and delete this line
|
||||
|
||||
return &permission.UserRoleResp{}, nil
|
||||
}
|
|
@ -0,0 +1,84 @@
|
|||
package model
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
"time"
|
||||
)
|
||||
|
||||
var _ RoleModel = (*customRoleModel)(nil)
|
||||
|
||||
type (
|
||||
// RoleModel is an interface to be customized, add more methods here,
|
||||
// and implement the added methods in customRoleModel.
|
||||
RoleModel interface {
|
||||
roleModel
|
||||
IncrementID(ctx context.Context) (int64, error)
|
||||
TransUpdateStatusByRoleID(
|
||||
ctx context.Context,
|
||||
session sqlx.Session,
|
||||
status int64,
|
||||
roleId string) error
|
||||
TransUpdateDisplayNameByRoleID(
|
||||
ctx context.Context,
|
||||
session sqlx.Session,
|
||||
roleId string,
|
||||
displayName string) error
|
||||
}
|
||||
|
||||
customRoleModel struct {
|
||||
*defaultRoleModel
|
||||
}
|
||||
|
||||
RoleFilter struct {
|
||||
PageIndex *int64
|
||||
PageSize *int64
|
||||
RoleId *string
|
||||
DisplayName *string
|
||||
Status *int64
|
||||
}
|
||||
)
|
||||
|
||||
// NewRoleModel returns a model for the database table.
|
||||
func NewRoleModel(conn sqlx.SqlConn) RoleModel {
|
||||
return &customRoleModel{
|
||||
defaultRoleModel: newRoleModel(conn),
|
||||
}
|
||||
}
|
||||
|
||||
func (m *customRoleModel) IncrementID(ctx context.Context) (int64, error) {
|
||||
var maxID int64
|
||||
query := fmt.Sprintf("select IFNULL(MAX(`id`), 0) from %s", m.table)
|
||||
err := m.conn.QueryRowCtx(ctx, &maxID, query)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
// 返回最大 ID 加 1
|
||||
return maxID + 1, nil
|
||||
}
|
||||
|
||||
func (m *customRoleModel) TransUpdateDisplayNameByRoleID(
|
||||
ctx context.Context,
|
||||
session sqlx.Session,
|
||||
displayName string,
|
||||
roleId string) error {
|
||||
query := fmt.Sprintf("update %s set `display_name` = ?, `update_time` = ? where `role_id` = ?", m.table)
|
||||
// 執行更新操作
|
||||
updateTime := time.Now().UTC().Unix()
|
||||
_, err := session.ExecCtx(ctx, query, displayName, updateTime, roleId)
|
||||
return err
|
||||
}
|
||||
|
||||
func (m *customRoleModel) TransUpdateStatusByRoleID(
|
||||
ctx context.Context,
|
||||
session sqlx.Session,
|
||||
status int64,
|
||||
roleId string) error {
|
||||
query := fmt.Sprintf("update %s set `status` = ?, `update_time` = ? where `role_id` = ?", m.table)
|
||||
// 執行更新操作
|
||||
updateTime := time.Now().UTC().Unix()
|
||||
_, err := session.ExecCtx(ctx, query, status, updateTime, roleId)
|
||||
return err
|
||||
}
|
|
@ -0,0 +1,125 @@
|
|||
// Code generated by goctl. DO NOT EDIT.
|
||||
|
||||
package model
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/stores/builder"
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlc"
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
"github.com/zeromicro/go-zero/core/stringx"
|
||||
)
|
||||
|
||||
var (
|
||||
roleFieldNames = builder.RawFieldNames(&Role{})
|
||||
roleRows = strings.Join(roleFieldNames, ",")
|
||||
roleRowsExpectAutoSet = strings.Join(stringx.Remove(roleFieldNames, "`id`"), ",")
|
||||
roleRowsWithPlaceHolder = strings.Join(stringx.Remove(roleFieldNames, "`id`"), "=?,") + "=?"
|
||||
)
|
||||
|
||||
type (
|
||||
roleModel interface {
|
||||
Insert(ctx context.Context, data *Role) (sql.Result, error)
|
||||
FindOne(ctx context.Context, id int64) (*Role, error)
|
||||
FindOneByDisplayName(ctx context.Context, displayName string) (*Role, error)
|
||||
FindOneByRoleId(ctx context.Context, roleId string) (*Role, error)
|
||||
Update(ctx context.Context, data *Role) error
|
||||
Delete(ctx context.Context, id int64) error
|
||||
}
|
||||
|
||||
defaultRoleModel struct {
|
||||
conn sqlx.SqlConn
|
||||
table string
|
||||
}
|
||||
|
||||
Role struct {
|
||||
Id int64 `db:"id"` // PK
|
||||
RoleId string `db:"role_id"`
|
||||
DisplayName string `db:"display_name"` // 名稱
|
||||
Status int64 `db:"status"` // 狀態 1: 啟用, 2: 禁用
|
||||
CreateTime int64 `db:"create_time"` // 創建時間
|
||||
UpdateTime int64 `db:"update_time"` // 更新時間
|
||||
}
|
||||
)
|
||||
|
||||
func newRoleModel(conn sqlx.SqlConn) *defaultRoleModel {
|
||||
return &defaultRoleModel{
|
||||
conn: conn,
|
||||
table: "`role`",
|
||||
}
|
||||
}
|
||||
|
||||
func (m *defaultRoleModel) withSession(session sqlx.Session) *defaultRoleModel {
|
||||
return &defaultRoleModel{
|
||||
conn: sqlx.NewSqlConnFromSession(session),
|
||||
table: "`role`",
|
||||
}
|
||||
}
|
||||
|
||||
func (m *defaultRoleModel) Delete(ctx context.Context, id int64) error {
|
||||
query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
|
||||
_, err := m.conn.ExecCtx(ctx, query, id)
|
||||
return err
|
||||
}
|
||||
|
||||
func (m *defaultRoleModel) FindOne(ctx context.Context, id int64) (*Role, error) {
|
||||
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", roleRows, m.table)
|
||||
var resp Role
|
||||
err := m.conn.QueryRowCtx(ctx, &resp, query, id)
|
||||
switch err {
|
||||
case nil:
|
||||
return &resp, nil
|
||||
case sqlc.ErrNotFound:
|
||||
return nil, ErrNotFound
|
||||
default:
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
func (m *defaultRoleModel) FindOneByDisplayName(ctx context.Context, displayName string) (*Role, error) {
|
||||
var resp Role
|
||||
query := fmt.Sprintf("select %s from %s where `display_name` = ? limit 1", roleRows, m.table)
|
||||
err := m.conn.QueryRowCtx(ctx, &resp, query, displayName)
|
||||
switch err {
|
||||
case nil:
|
||||
return &resp, nil
|
||||
case sqlc.ErrNotFound:
|
||||
return nil, ErrNotFound
|
||||
default:
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
func (m *defaultRoleModel) FindOneByRoleId(ctx context.Context, roleId string) (*Role, error) {
|
||||
var resp Role
|
||||
query := fmt.Sprintf("select %s from %s where `role_id` = ? limit 1", roleRows, m.table)
|
||||
err := m.conn.QueryRowCtx(ctx, &resp, query, roleId)
|
||||
switch err {
|
||||
case nil:
|
||||
return &resp, nil
|
||||
case sqlc.ErrNotFound:
|
||||
return nil, ErrNotFound
|
||||
default:
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
func (m *defaultRoleModel) Insert(ctx context.Context, data *Role) (sql.Result, error) {
|
||||
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?)", m.table, roleRowsExpectAutoSet)
|
||||
ret, err := m.conn.ExecCtx(ctx, query, data.RoleId, data.DisplayName, data.Status, data.CreateTime, data.UpdateTime)
|
||||
return ret, err
|
||||
}
|
||||
|
||||
func (m *defaultRoleModel) Update(ctx context.Context, newData *Role) error {
|
||||
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, roleRowsWithPlaceHolder)
|
||||
_, err := m.conn.ExecCtx(ctx, query, newData.RoleId, newData.DisplayName, newData.Status, newData.CreateTime, newData.UpdateTime, newData.Id)
|
||||
return err
|
||||
}
|
||||
|
||||
func (m *defaultRoleModel) tableName() string {
|
||||
return m.table
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
package model
|
||||
|
||||
import "github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
|
||||
var _ RolePermissionModel = (*customRolePermissionModel)(nil)
|
||||
|
||||
type (
|
||||
// RolePermissionModel is an interface to be customized, add more methods here,
|
||||
// and implement the added methods in customRolePermissionModel.
|
||||
RolePermissionModel interface {
|
||||
rolePermissionModel
|
||||
}
|
||||
|
||||
customRolePermissionModel struct {
|
||||
*defaultRolePermissionModel
|
||||
}
|
||||
)
|
||||
|
||||
// NewRolePermissionModel returns a model for the database table.
|
||||
func NewRolePermissionModel(conn sqlx.SqlConn) RolePermissionModel {
|
||||
return &customRolePermissionModel{
|
||||
defaultRolePermissionModel: newRolePermissionModel(conn),
|
||||
}
|
||||
}
|
|
@ -0,0 +1,94 @@
|
|||
// Code generated by goctl. DO NOT EDIT.
|
||||
|
||||
package model
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/stores/builder"
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlc"
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
"github.com/zeromicro/go-zero/core/stringx"
|
||||
)
|
||||
|
||||
var (
|
||||
rolePermissionFieldNames = builder.RawFieldNames(&RolePermission{})
|
||||
rolePermissionRows = strings.Join(rolePermissionFieldNames, ",")
|
||||
rolePermissionRowsExpectAutoSet = strings.Join(stringx.Remove(rolePermissionFieldNames, "`id`"), ",")
|
||||
rolePermissionRowsWithPlaceHolder = strings.Join(stringx.Remove(rolePermissionFieldNames, "`id`"), "=?,") + "=?"
|
||||
)
|
||||
|
||||
type (
|
||||
rolePermissionModel interface {
|
||||
Insert(ctx context.Context, data *RolePermission) (sql.Result, error)
|
||||
FindOne(ctx context.Context, id int64) (*RolePermission, error)
|
||||
Update(ctx context.Context, data *RolePermission) error
|
||||
Delete(ctx context.Context, id int64) error
|
||||
}
|
||||
|
||||
defaultRolePermissionModel struct {
|
||||
conn sqlx.SqlConn
|
||||
table string
|
||||
}
|
||||
|
||||
RolePermission struct {
|
||||
Id int64 `db:"id"` // PK
|
||||
RoleId sql.NullInt64 `db:"role_id"` // role.id
|
||||
PermissionId sql.NullInt64 `db:"permission_id"` // permission.id
|
||||
CreateTime int64 `db:"create_time"` // 創建時間
|
||||
UpdateTime int64 `db:"update_time"` // 更新時間
|
||||
}
|
||||
)
|
||||
|
||||
func newRolePermissionModel(conn sqlx.SqlConn) *defaultRolePermissionModel {
|
||||
return &defaultRolePermissionModel{
|
||||
conn: conn,
|
||||
table: "`role_permission`",
|
||||
}
|
||||
}
|
||||
|
||||
func (m *defaultRolePermissionModel) withSession(session sqlx.Session) *defaultRolePermissionModel {
|
||||
return &defaultRolePermissionModel{
|
||||
conn: sqlx.NewSqlConnFromSession(session),
|
||||
table: "`role_permission`",
|
||||
}
|
||||
}
|
||||
|
||||
func (m *defaultRolePermissionModel) Delete(ctx context.Context, id int64) error {
|
||||
query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
|
||||
_, err := m.conn.ExecCtx(ctx, query, id)
|
||||
return err
|
||||
}
|
||||
|
||||
func (m *defaultRolePermissionModel) FindOne(ctx context.Context, id int64) (*RolePermission, error) {
|
||||
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", rolePermissionRows, m.table)
|
||||
var resp RolePermission
|
||||
err := m.conn.QueryRowCtx(ctx, &resp, query, id)
|
||||
switch err {
|
||||
case nil:
|
||||
return &resp, nil
|
||||
case sqlc.ErrNotFound:
|
||||
return nil, ErrNotFound
|
||||
default:
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
func (m *defaultRolePermissionModel) Insert(ctx context.Context, data *RolePermission) (sql.Result, error) {
|
||||
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?)", m.table, rolePermissionRowsExpectAutoSet)
|
||||
ret, err := m.conn.ExecCtx(ctx, query, data.RoleId, data.PermissionId, data.CreateTime, data.UpdateTime)
|
||||
return ret, err
|
||||
}
|
||||
|
||||
func (m *defaultRolePermissionModel) Update(ctx context.Context, data *RolePermission) error {
|
||||
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, rolePermissionRowsWithPlaceHolder)
|
||||
_, err := m.conn.ExecCtx(ctx, query, data.RoleId, data.PermissionId, data.CreateTime, data.UpdateTime, data.Id)
|
||||
return err
|
||||
}
|
||||
|
||||
func (m *defaultRolePermissionModel) tableName() string {
|
||||
return m.table
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
package model
|
||||
|
||||
import "github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
|
||||
var _ UserRoleModel = (*customUserRoleModel)(nil)
|
||||
|
||||
type (
|
||||
// UserRoleModel is an interface to be customized, add more methods here,
|
||||
// and implement the added methods in customUserRoleModel.
|
||||
UserRoleModel interface {
|
||||
userRoleModel
|
||||
}
|
||||
|
||||
customUserRoleModel struct {
|
||||
*defaultUserRoleModel
|
||||
}
|
||||
)
|
||||
|
||||
// NewUserRoleModel returns a model for the database table.
|
||||
func NewUserRoleModel(conn sqlx.SqlConn) UserRoleModel {
|
||||
return &customUserRoleModel{
|
||||
defaultUserRoleModel: newUserRoleModel(conn),
|
||||
}
|
||||
}
|
|
@ -0,0 +1,111 @@
|
|||
// Code generated by goctl. DO NOT EDIT.
|
||||
|
||||
package model
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/stores/builder"
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlc"
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
"github.com/zeromicro/go-zero/core/stringx"
|
||||
)
|
||||
|
||||
var (
|
||||
userRoleFieldNames = builder.RawFieldNames(&UserRole{})
|
||||
userRoleRows = strings.Join(userRoleFieldNames, ",")
|
||||
userRoleRowsExpectAutoSet = strings.Join(stringx.Remove(userRoleFieldNames, "`id`"), ",")
|
||||
userRoleRowsWithPlaceHolder = strings.Join(stringx.Remove(userRoleFieldNames, "`id`"), "=?,") + "=?"
|
||||
)
|
||||
|
||||
type (
|
||||
userRoleModel interface {
|
||||
Insert(ctx context.Context, data *UserRole) (sql.Result, error)
|
||||
FindOne(ctx context.Context, id int64) (*UserRole, error)
|
||||
FindOneByUid(ctx context.Context, uid string) (*UserRole, error)
|
||||
Update(ctx context.Context, data *UserRole) error
|
||||
Delete(ctx context.Context, id int64) error
|
||||
}
|
||||
|
||||
defaultUserRoleModel struct {
|
||||
conn sqlx.SqlConn
|
||||
table string
|
||||
}
|
||||
|
||||
UserRole struct {
|
||||
Id int64 `db:"id"` // PK
|
||||
Brand string `db:"brand"`
|
||||
Uid string `db:"uid"`
|
||||
RoleId string `db:"role_id"`
|
||||
Status int64 `db:"status"` // 狀態 1: 啟用, 2: 禁用
|
||||
CreateTime int64 `db:"create_time"` // 創建時間
|
||||
UpdateTime int64 `db:"update_time"` // 更新時間
|
||||
}
|
||||
)
|
||||
|
||||
func newUserRoleModel(conn sqlx.SqlConn) *defaultUserRoleModel {
|
||||
return &defaultUserRoleModel{
|
||||
conn: conn,
|
||||
table: "`user_role`",
|
||||
}
|
||||
}
|
||||
|
||||
func (m *defaultUserRoleModel) withSession(session sqlx.Session) *defaultUserRoleModel {
|
||||
return &defaultUserRoleModel{
|
||||
conn: sqlx.NewSqlConnFromSession(session),
|
||||
table: "`user_role`",
|
||||
}
|
||||
}
|
||||
|
||||
func (m *defaultUserRoleModel) Delete(ctx context.Context, id int64) error {
|
||||
query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
|
||||
_, err := m.conn.ExecCtx(ctx, query, id)
|
||||
return err
|
||||
}
|
||||
|
||||
func (m *defaultUserRoleModel) FindOne(ctx context.Context, id int64) (*UserRole, error) {
|
||||
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", userRoleRows, m.table)
|
||||
var resp UserRole
|
||||
err := m.conn.QueryRowCtx(ctx, &resp, query, id)
|
||||
switch err {
|
||||
case nil:
|
||||
return &resp, nil
|
||||
case sqlc.ErrNotFound:
|
||||
return nil, ErrNotFound
|
||||
default:
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
func (m *defaultUserRoleModel) FindOneByUid(ctx context.Context, uid string) (*UserRole, error) {
|
||||
var resp UserRole
|
||||
query := fmt.Sprintf("select %s from %s where `uid` = ? limit 1", userRoleRows, m.table)
|
||||
err := m.conn.QueryRowCtx(ctx, &resp, query, uid)
|
||||
switch err {
|
||||
case nil:
|
||||
return &resp, nil
|
||||
case sqlc.ErrNotFound:
|
||||
return nil, ErrNotFound
|
||||
default:
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
func (m *defaultUserRoleModel) Insert(ctx context.Context, data *UserRole) (sql.Result, error) {
|
||||
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?)", m.table, userRoleRowsExpectAutoSet)
|
||||
ret, err := m.conn.ExecCtx(ctx, query, data.Brand, data.Uid, data.RoleId, data.Status, data.CreateTime, data.UpdateTime)
|
||||
return ret, err
|
||||
}
|
||||
|
||||
func (m *defaultUserRoleModel) Update(ctx context.Context, newData *UserRole) error {
|
||||
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, userRoleRowsWithPlaceHolder)
|
||||
_, err := m.conn.ExecCtx(ctx, query, newData.Brand, newData.Uid, newData.RoleId, newData.Status, newData.CreateTime, newData.UpdateTime, newData.Id)
|
||||
return err
|
||||
}
|
||||
|
||||
func (m *defaultUserRoleModel) tableName() string {
|
||||
return m.table
|
||||
}
|
|
@ -28,10 +28,10 @@ func (s *PermissionServiceServer) ListPermissionStatus(ctx context.Context, in *
|
|||
return l.ListPermissionStatus(in)
|
||||
}
|
||||
|
||||
// MapPermissionStatus 取得所有權限開閉狀態,簡易版,給前端表演用
|
||||
func (s *PermissionServiceServer) MapPermissionStatus(ctx context.Context, in *permission.NoneReq) (*permission.MapPermissionStatusResp, error) {
|
||||
l := permissionservicelogic.NewMapPermissionStatusLogic(ctx, s.svcCtx)
|
||||
return l.MapPermissionStatus(in)
|
||||
// ListPermission 一次性取得所有權限表
|
||||
func (s *PermissionServiceServer) ListPermission(ctx context.Context, in *permission.NoneReq) (*permission.MapPermissionStatusResp, error) {
|
||||
l := permissionservicelogic.NewListPermissionLogic(ctx, s.svcCtx)
|
||||
return l.ListPermission(in)
|
||||
}
|
||||
|
||||
// CheckPermissionByRole 透過角色 ID 來檢視權限,後台要通過時真的看這個
|
||||
|
|
|
@ -22,7 +22,20 @@ func NewRoleServiceServer(svcCtx *svc.ServiceContext) *RoleServiceServer {
|
|||
}
|
||||
}
|
||||
|
||||
func (s *RoleServiceServer) Ping(ctx context.Context, in *permission.OKResp) (*permission.OKResp, error) {
|
||||
l := roleservicelogic.NewPingLogic(ctx, s.svcCtx)
|
||||
return l.Ping(in)
|
||||
// CreateRole 建立角色
|
||||
func (s *RoleServiceServer) CreateRole(ctx context.Context, in *permission.CreateRoleReq) (*permission.RoleResp, error) {
|
||||
l := roleservicelogic.NewCreateRoleLogic(ctx, s.svcCtx)
|
||||
return l.CreateRole(in)
|
||||
}
|
||||
|
||||
// GetRole 取得搜尋的角色
|
||||
func (s *RoleServiceServer) GetRole(ctx context.Context, in *permission.GetRoleReq) (*permission.GetRoleResp, error) {
|
||||
l := roleservicelogic.NewGetRoleLogic(ctx, s.svcCtx)
|
||||
return l.GetRole(in)
|
||||
}
|
||||
|
||||
// UpdateRole 更新角色
|
||||
func (s *RoleServiceServer) UpdateRole(ctx context.Context, in *permission.UpdateRoleReq) (*permission.RoleResp, error) {
|
||||
l := roleservicelogic.NewUpdateRoleLogic(ctx, s.svcCtx)
|
||||
return l.UpdateRole(in)
|
||||
}
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
// Code generated by goctl. DO NOT EDIT.
|
||||
// Source: permission.proto
|
||||
|
||||
package server
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"ark-permission/gen_result/pb/permission"
|
||||
"ark-permission/internal/logic/userroleservice"
|
||||
"ark-permission/internal/svc"
|
||||
)
|
||||
|
||||
type UserRoleServiceServer struct {
|
||||
svcCtx *svc.ServiceContext
|
||||
permission.UnimplementedUserRoleServiceServer
|
||||
}
|
||||
|
||||
func NewUserRoleServiceServer(svcCtx *svc.ServiceContext) *UserRoleServiceServer {
|
||||
return &UserRoleServiceServer{
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
// CreateUserRole 建立角色
|
||||
func (s *UserRoleServiceServer) CreateUserRole(ctx context.Context, in *permission.UserRoleReq) (*permission.UserRoleResp, error) {
|
||||
l := userroleservicelogic.NewCreateUserRoleLogic(ctx, s.svcCtx)
|
||||
return l.CreateUserRole(in)
|
||||
}
|
||||
|
||||
// UpdateRole 更新角色
|
||||
func (s *UserRoleServiceServer) UpdateUserRole(ctx context.Context, in *permission.UserRoleReq) (*permission.UserRoleResp, error) {
|
||||
l := userroleservicelogic.NewUpdateUserRoleLogic(ctx, s.svcCtx)
|
||||
return l.UpdateUserRole(in)
|
||||
}
|
||||
|
||||
// GetUserRole 取得角色綁定表,沒有搜尋條件就全部,不分頁
|
||||
func (s *UserRoleServiceServer) GetUserRole(ctx context.Context, in *permission.UserRoleReq) (*permission.GetUserRoleResp, error) {
|
||||
l := userroleservicelogic.NewGetUserRoleLogic(ctx, s.svcCtx)
|
||||
return l.GetUserRole(in)
|
||||
}
|
||||
|
||||
// GetUserPermission 取得角色權限
|
||||
func (s *UserRoleServiceServer) GetUserPermission(ctx context.Context, in *permission.UserPermissionReq) (*permission.UserPermissionResp, error) {
|
||||
l := userroleservicelogic.NewGetUserPermissionLogic(ctx, s.svcCtx)
|
||||
return l.GetUserPermission(in)
|
||||
}
|
|
@ -21,8 +21,11 @@ type ServiceContext struct {
|
|||
Validate required.Validate
|
||||
Redis redis.Redis
|
||||
TokenRedisRepo repository.TokenRepository
|
||||
Permission model.PermissionModel
|
||||
PolicyAgent domainUseCase.OpaUseCase
|
||||
|
||||
Conn sqlx.SqlConn
|
||||
Permission model.PermissionModel
|
||||
RoleRepo model.RoleModel
|
||||
}
|
||||
|
||||
func NewServiceContext(c config.Config) *ServiceContext {
|
||||
|
@ -51,7 +54,10 @@ func NewServiceContext(c config.Config) *ServiceContext {
|
|||
TokenRedisRepo: repo.NewTokenRepository(repo.TokenRepositoryParam{
|
||||
Store: newRedis,
|
||||
}),
|
||||
Permission: model.NewPermissionModel(sqlConn),
|
||||
PolicyAgent: pa,
|
||||
|
||||
Permission: model.NewPermissionModel(sqlConn),
|
||||
RoleRepo: model.NewRoleModel(sqlConn),
|
||||
Conn: sqlConn,
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue