package role import ( "SciencesServer/app/api/admin/controller" "SciencesServer/app/api/admin/model" model2 "SciencesServer/app/common/model" "SciencesServer/app/service" "SciencesServer/app/session" "SciencesServer/serve/logger" "SciencesServer/utils" "errors" "fmt" "time" ) type Instance struct{ *session.Admin } type InstanceHandle func(session *session.Admin) *Instance type ( // InstanceInfo 角色信息 InstanceInfo struct { ID string `json:"id"` *model2.SysRole } // InstanceBasicInfo 角色基本信息 InstanceBasicInfo struct { ID uint64 `json:"id"` Name string `json:"name"` } ) // Index 列表信息 func (c *Instance) Index(name string, page, pageSize int) (*controller.ReturnPages, error) { mSysRole := model.NewSysRole() where := []*model2.ModelWhereOrder{ &model2.ModelWhereOrder{ Where: model2.NewWhere("tenant_id", c.TenantID), Order: model2.NewOrder("sort", model2.OrderModeToAsc), }, &model2.ModelWhereOrder{ Order: model2.NewOrder("id", model2.OrderModeToDesc), }, } if name != "" { where = append(where, &model2.ModelWhereOrder{ Where: model2.NewWhereLike("name", name), }) } 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 { list = append(list, &InstanceInfo{ID: v.GetEncodeID(), SysRole: v}) } return &controller.ReturnPages{Data: list, Count: count}, nil } // Select 筛选信息 func (c *Instance) Select() ([]*InstanceBasicInfo, error) { mSysRole := model.NewSysRole() where := []*model2.ModelWhereOrder{ &model2.ModelWhereOrder{ Where: model2.NewWhere("tenant_id", c.TenantID), Order: model2.NewOrder("sort", model2.OrderModeToAsc), }, &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 } // Form 数据操作 func (c *Instance) Form(id uint64, name, remark string, sort int) error { 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 { return errors.New("操作错误,角色信息不存在") } else if c.TenantID > 0 && c.TenantID != mSysRole.TenantID { return errors.New("操作错误,无权限操作") } if err = model2.Delete(mSysRole.SysRole); err != nil { return err } go utils.TryCatch(func() { 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 } }) return nil } func NewInstance() InstanceHandle { return func(session *session.Admin) *Instance { return &Instance{Admin: session} } }