Files

172 lines
4.1 KiB
Go
Raw Normal View History

2021-09-28 11:47:19 +08:00
package role
import (
2022-01-05 11:29:27 +08:00
"SciencesServer/app/api/admin/controller"
"SciencesServer/app/api/admin/model"
2021-09-28 11:47:19 +08:00
model2 "SciencesServer/app/common/model"
"SciencesServer/app/service"
2022-01-06 17:11:57 +08:00
"SciencesServer/app/session"
"SciencesServer/serve/logger"
2021-09-28 11:47:19 +08:00
"SciencesServer/utils"
"errors"
2022-01-06 17:11:57 +08:00
"fmt"
2021-09-28 11:47:19 +08:00
"time"
)
2022-01-06 17:11:57 +08:00
type Instance struct{ *session.Admin }
2021-09-28 11:47:19 +08:00
2022-01-06 17:11:57 +08:00
type InstanceHandle func(session *session.Admin) *Instance
2021-09-28 11:47:19 +08:00
type (
// InstanceInfo 角色信息
InstanceInfo struct {
2022-01-06 17:11:57 +08:00
ID string `json:"id"`
2021-09-28 11:47:19 +08:00
*model2.SysRole
}
// InstanceBasicInfo 角色基本信息
InstanceBasicInfo struct {
ID uint64 `json:"id"`
Name string `json:"name"`
}
)
2022-01-06 17:11:57 +08:00
// Index 列表信息
func (c *Instance) Index(name string, page, pageSize int) (*controller.ReturnPages, error) {
2021-09-28 11:47:19 +08:00
mSysRole := model.NewSysRole()
where := []*model2.ModelWhereOrder{
&model2.ModelWhereOrder{
Where: model2.NewWhere("tenant_id", c.TenantID),
2022-01-06 17:11:57 +08:00
Order: model2.NewOrder("sort", model2.OrderModeToAsc),
2021-09-28 11:47:19 +08:00
},
&model2.ModelWhereOrder{
Order: model2.NewOrder("id", model2.OrderModeToDesc),
},
}
if name != "" {
where = append(where, &model2.ModelWhereOrder{
2022-01-06 17:11:57 +08:00
Where: model2.NewWhereLike("name", name),
2021-09-28 11:47:19 +08:00
})
}
var count int64
out := make([]*model2.SysRole, 0)
if err := model2.Pages(mSysRole.SysRole, &out, page, pageSize, &count, where...); err != nil {
return nil, err
}
list := make([]*InstanceInfo, 0)
for _, v := range out {
2022-01-06 17:11:57 +08:00
list = append(list, &InstanceInfo{ID: v.GetEncodeID(), SysRole: v})
2021-09-28 11:47:19 +08:00
}
2021-10-12 16:53:49 +08:00
return &controller.ReturnPages{Data: list, Count: count}, nil
2021-09-28 11:47:19 +08:00
}
// Select 筛选信息
func (c *Instance) Select() ([]*InstanceBasicInfo, error) {
mSysRole := model.NewSysRole()
where := []*model2.ModelWhereOrder{
&model2.ModelWhereOrder{
Where: model2.NewWhere("tenant_id", c.TenantID),
2022-01-06 17:11:57 +08:00
Order: model2.NewOrder("sort", model2.OrderModeToAsc),
2021-09-28 11:47:19 +08:00
},
&model2.ModelWhereOrder{
Order: model2.NewOrder("id", model2.OrderModeToDesc),
},
}
out := make([]*InstanceBasicInfo, 0)
if err := model2.Scan(mSysRole.SysRole, &out, where...); err != nil {
return nil, err
}
return out, nil
}
2022-01-06 17:11:57 +08:00
// Form 数据操作
func (c *Instance) Form(id uint64, name, remark string, sort int) error {
2021-09-28 11:47:19 +08:00
mSysRole := model.NewSysRole()
if id <= 0 {
mSysRole.TenantID = c.TenantID
mSysRole.Name = name
mSysRole.Remark = remark
mSysRole.Sort = sort
mSysRole.Status = model2.SysRoleStatusForNormal
if err := model2.Create(mSysRole.SysRole); err != nil {
return err
}
return nil
}
mSysRole.ID = id
if err := model2.Updates(mSysRole.SysRole, map[string]interface{}{
"name": name, "remark": remark, "sort": sort,
}); err != nil {
return err
}
return nil
}
// Status 状态操作
func (c *Instance) Status(id uint64, status int) error {
mSysRole := model.NewSysRole()
mSysRole.ID = id
isExist, err := model2.FirstWhere(mSysRole.SysRole)
if err != nil {
return err
} else if !isExist {
return errors.New("角色不存在")
}
if c.TenantID > 0 && c.TenantID != mSysRole.TenantID {
return errors.New("不可操作其他租户角色")
}
if err = model2.Updates(mSysRole.SysRole, map[string]interface{}{
"status": status, "updated_at": time.Now(),
}); err != nil {
return err
}
return nil
}
// Delete 删除操作
func (c *Instance) Delete(id uint64) error {
mSysRole := model.NewSysRole()
mSysRole.ID = id
isExist, err := model2.FirstWhere(mSysRole.SysRole)
if err != nil {
return err
} else if !isExist {
2022-01-06 17:11:57 +08:00
return errors.New("操作错误,角色信息不存在")
} else if c.TenantID > 0 && c.TenantID != mSysRole.TenantID {
return errors.New("操作错误,无权限操作")
2021-09-28 11:47:19 +08:00
}
if err = model2.Delete(mSysRole.SysRole); err != nil {
return err
}
go utils.TryCatch(func() {
2022-01-06 17:11:57 +08:00
permission := service.NewPermission(
service.WithAuthTenant(fmt.Sprintf("%d", mSysRole.TenantID)),
service.WithAuthRoles([]string{fmt.Sprintf("%d", id)}),
)
if _, err = permission.RemoveRolePolicy(); err != nil {
logger.ErrorF("Casbin 删除租户【%d】下角色【%d】权限信息错误%v", mSysRole.TenantID, id, err)
return
}
2021-09-28 11:47:19 +08:00
})
return nil
}
func NewInstance() InstanceHandle {
2022-01-06 17:11:57 +08:00
return func(session *session.Admin) *Instance {
return &Instance{Admin: session}
2021-09-28 11:47:19 +08:00
}
}