94 lines
2.3 KiB
Go
94 lines
2.3 KiB
Go
package applogic
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"aijianzhan/platform/internal/authx"
|
|
"aijianzhan/platform/internal/rolestore"
|
|
"aijianzhan/platform/internal/svc"
|
|
"aijianzhan/platform/internal/tenantperm"
|
|
"aijianzhan/platform/internal/types"
|
|
)
|
|
|
|
type RoleAdminLogic struct {
|
|
ctx context.Context
|
|
svcCtx *svc.ServiceContext
|
|
}
|
|
|
|
func NewRoleAdminLogic(ctx context.Context, svcCtx *svc.ServiceContext) *RoleAdminLogic {
|
|
return &RoleAdminLogic{ctx: ctx, svcCtx: svcCtx}
|
|
}
|
|
|
|
func (l *RoleAdminLogic) store() (rolestore.Store, error) {
|
|
if l.svcCtx.Roles == nil {
|
|
return nil, fmt.Errorf("role store unavailable")
|
|
}
|
|
return l.svcCtx.Roles, nil
|
|
}
|
|
|
|
func (l *RoleAdminLogic) List() ([]rolestore.Role, error) {
|
|
st, err := l.store()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
tid := authx.TenantID(l.ctx)
|
|
_ = st.EnsureDefaults(l.ctx, tid)
|
|
return st.List(l.ctx, tid)
|
|
}
|
|
|
|
func (l *RoleAdminLogic) Get(roleID int64) (*rolestore.Role, error) {
|
|
st, err := l.store()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return st.Get(l.ctx, authx.TenantID(l.ctx), roleID)
|
|
}
|
|
|
|
func (l *RoleAdminLogic) Create(req *types.RoleCreateReq) (*rolestore.Role, error) {
|
|
st, err := l.store()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
perms := authx.NormalizePerms(req.Permissions)
|
|
if err := tenantperm.MustAllow(l.ctx, l.svcCtx.TenantPerm, authx.TenantID(l.ctx), perms); err != nil {
|
|
return nil, err
|
|
}
|
|
return st.Create(l.ctx, authx.TenantID(l.ctx), rolestore.CreateInput{
|
|
Code: req.Code,
|
|
Name: req.Name,
|
|
Description: req.Description,
|
|
Permissions: perms,
|
|
})
|
|
}
|
|
|
|
func (l *RoleAdminLogic) Update(roleID int64, req *types.RoleUpdateReq) (*rolestore.Role, error) {
|
|
st, err := l.store()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
in := rolestore.UpdateInput{}
|
|
if req.Name != nil {
|
|
in.Name = req.Name
|
|
}
|
|
if req.Description != nil {
|
|
in.Description = req.Description
|
|
}
|
|
if req.Permissions != nil {
|
|
perms := authx.NormalizePerms(*req.Permissions)
|
|
if err := tenantperm.MustAllow(l.ctx, l.svcCtx.TenantPerm, authx.TenantID(l.ctx), perms); err != nil {
|
|
return nil, err
|
|
}
|
|
in.Permissions = &perms
|
|
}
|
|
return st.Update(l.ctx, authx.TenantID(l.ctx), roleID, in)
|
|
}
|
|
|
|
func (l *RoleAdminLogic) Delete(roleID int64) error {
|
|
st, err := l.store()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return st.Delete(l.ctx, authx.TenantID(l.ctx), roleID)
|
|
}
|