package models
|
|
|
|
import (
|
|
"leit.com/LAPP_GAAS_GFrame/db"
|
|
"leit.com/LAPP_GAAS_GFrame/utils"
|
|
"errors"
|
|
)
|
|
|
|
/***
|
|
*CreateBy:lou
|
|
*Date:2020/5/15
|
|
*TableName:角色表
|
|
**********/
|
|
|
|
type Roletab struct {
|
|
RoleId int `xorm:"not null pk comment('角色ID') VARCHAR(40)" json:"role_id"`
|
|
RoleKey string `xorm:"comment('角色代码') VARCHAR(40)" json:"role_key"`
|
|
Rolename string `xorm:"comment('角色名') VARCHAR(40)" json:"rolename"`
|
|
RoleSort int `xorm:"comment('角色顺序') INT(0)" json:"role_sort"`
|
|
Status string `xorm:"comment('状态') VARCHAR(1)" json:"status"`
|
|
Remark string `xorm:"comment('备注') VARCHAR(100)" json:"remark"`
|
|
DataScope string `xorm:"comment('') VARCHAR(128)" json:"data_scope"`
|
|
Createtime string `xorm:"comment('创建时间') VARCHAR(14)" json:"createtime"`
|
|
Lastmodifytime string `xorm:"comment('最近一次更新时间') VARCHAR(14)" json:"lastmodifytime"`
|
|
Lastmodify string `xorm:"comment('最近一次更新人员') VARCHAR(40)" json:"lastmodify"`
|
|
Params string `json:"params" xorm:"-"`
|
|
MenuIds []int `json:"menuIds" xorm:"-"`
|
|
DeptIds []string `json:"deptIds" xorm:"-"`
|
|
}
|
|
|
|
type RoleB struct {
|
|
RoleKey string `json:"role_key"`
|
|
Rolename string `json:"rolename"`
|
|
RoleSort int `json:"role_sort"`
|
|
Status string `json:"status"`
|
|
Remark string `json:"remark"`
|
|
DataScope string `json:"data_scope"`
|
|
Createtime string `json:"createtime"`
|
|
Lastmodifytime string `json:"lastmodifytime"`
|
|
Lastmodify string `json:"lastmodify"`
|
|
}
|
|
|
|
func (t *Roletab) TableName() string {
|
|
return "roletab"
|
|
}
|
|
// 清除string字段的右侧空格
|
|
func (t *Roletab) Clipped() {
|
|
utils.TrimStruct(t, *t)
|
|
}
|
|
|
|
type MenuIdList struct {
|
|
MenuId int `json:"menuId"`
|
|
}
|
|
|
|
func (t *Roletab) GetPage(pageSize int, pageIndex int) ([]Roletab, int, error) {
|
|
var doc []Roletab
|
|
e := db.Eloquent.Master()
|
|
table := e.Select("*").Table("roletab").Where("1=1")
|
|
if t.RoleId != 0 {
|
|
table = table.And("role_id = ?", t.RoleId)
|
|
}
|
|
if t.Rolename != "" {
|
|
rolename := "%"+t.Rolename+"%"
|
|
table = table.And("rolename like ?", rolename)
|
|
}
|
|
if !utils.ValueIsEmpty(t.Status) {
|
|
table = table.And("status = ?", t.Status)
|
|
}
|
|
if t.RoleKey != "" {
|
|
table = table.And("role_key = ?", t.RoleKey)
|
|
}
|
|
|
|
// 数据权限控制
|
|
//dataPermission := new(DataPermission)
|
|
//dataPermission.UserId = t.DataScope
|
|
//table = dataPermission.GetDataScope("roletab", table)
|
|
|
|
if err := table.OrderBy("role_sort").Limit(pageSize, (pageIndex-1)*pageSize).Find(&doc); err != nil {
|
|
return nil, 0, err
|
|
}
|
|
rolecount := new(Roletab)
|
|
count, err := table.Count(rolecount)
|
|
if err != nil {
|
|
return nil, 0, err
|
|
}
|
|
for k,_:=range doc{
|
|
doc[k].Clipped()
|
|
}
|
|
return doc, int(count), nil
|
|
}
|
|
|
|
func (t *Roletab) Get() (SysRole Roletab, err error) {
|
|
e := db.Eloquent.Master()
|
|
table := e.Table("roletab").Where("1=1")
|
|
if t.RoleId != 0 {
|
|
table = table.And("role_id = ?", t.RoleId)
|
|
}
|
|
if t.Rolename != "" {
|
|
table = table.And("rolename = ?", t.Rolename)
|
|
}
|
|
if _,err = table.Get(&SysRole); err != nil {
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
func (t *Roletab) GetList() (SysRole []Roletab, err error) {
|
|
e := db.Eloquent.Master()
|
|
table := e.Table("roletab")
|
|
if t.RoleId != 0 {
|
|
table = table.Where("role_id = ?", t.RoleId)
|
|
}
|
|
if t.Rolename != "" {
|
|
table = table.Where("rolename = ?", t.Rolename)
|
|
}
|
|
if err = table.OrderBy("role_sort").Find(&SysRole); err != nil {
|
|
return
|
|
}
|
|
for k,_:= range SysRole{
|
|
SysRole[k].Clipped()
|
|
}
|
|
return
|
|
}
|
|
|
|
// 获取角色对应的菜单ids
|
|
func (t *Roletab) GetRoleMeunId() ([]int, error) {
|
|
menuIds := make([]int, 0)
|
|
menuList := make([]MenuIdList, 0)
|
|
e := db.Eloquent.Master()
|
|
if err := e.Table("role_menu").Select("role_menu.menu_id").Join("LEFT", "menu", "menu.menu_id = role_menu.menu_id").Where("role_menu.role_id = ? ", t.RoleId).And(" role_menu.menu_id not in(select menu.parent_id from role_menu LEFT JOIN menu on menu.menu_id=role_menu.menu_id where role_menu.role_id =? )", t.RoleId).Find(&menuList); err != nil {
|
|
return nil, err
|
|
}
|
|
for i := 0; i < len(menuList); i++ {
|
|
menuIds = append(menuIds, menuList[i].MenuId)
|
|
}
|
|
return menuIds, nil
|
|
}
|
|
|
|
func (t *Roletab) Insert() (id int, err error) {
|
|
e := db.Eloquent.Master()
|
|
role := new(RoleB)
|
|
role.Lastmodify = t.Lastmodify
|
|
role.RoleKey = t.RoleKey
|
|
role.Lastmodifytime = t.Lastmodifytime
|
|
role.Rolename = t.Rolename
|
|
role.Status = t.Status
|
|
role.Remark = t.Remark
|
|
role.Createtime = t.Createtime
|
|
countrole := new(Roletab)
|
|
affw, err := e.Table("roletab").Where("rolename=? or role_key = ?", t.Rolename, t.RoleKey).Count(countrole)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
if affw > 0 {
|
|
return 0, errors.New("角色名称或者角色标识已经存在!")
|
|
}
|
|
_, err = e.Table("roletab").Insert(role)
|
|
|
|
result := new(Roletab)
|
|
result.Rolename = t.Rolename
|
|
result.RoleKey = t.RoleKey
|
|
ok, err := e.Table("roletab").Get(result)
|
|
|
|
if !ok || err != nil {
|
|
return 0, err
|
|
}
|
|
id = result.RoleId
|
|
return
|
|
}
|
|
|
|
type DeptIdList struct {
|
|
DeptId int `json:"DeptId"`
|
|
}
|
|
|
|
func (t *Roletab) GetRoleDeptId() ([]int, error) {
|
|
deptIds := make([]int, 0)
|
|
deptList := make([]DeptIdList, 0)
|
|
e := db.Eloquent.Master()
|
|
if err := e.Table("role_dept").Select("role_dept.dept_id").Join("LEFT", "dept", "dept.dept_id=role_dept.dept_id").Where("role_id = ? ", t.RoleId).And(" role_dept.dept_id not in(select dept.parent_id from role_dept LEFT JOIN dept on dept.dept_id=role_dept.dept_id where role_id =? )", t.RoleId).Find(&deptList); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for i := 0; i < len(deptList); i++ {
|
|
deptIds = append(deptIds, deptList[i].DeptId)
|
|
}
|
|
|
|
return deptIds, nil
|
|
}
|
|
|
|
//修改
|
|
func (t *Roletab) Update(id int) (update Roletab, err error) {
|
|
t.Clipped()
|
|
e := db.Eloquent.Master()
|
|
if _,err = e.Table("roletab").ID(id).Get(&update); err != nil {
|
|
return
|
|
}
|
|
update.Clipped()
|
|
if t.Rolename != "" && t.Rolename != update.Rolename {
|
|
return update, errors.New("角色名称不允许修改!")
|
|
}
|
|
|
|
if t.RoleKey != "" && t.RoleKey != update.RoleKey {
|
|
return update, errors.New("角色标识不允许修改!")
|
|
}
|
|
|
|
//参数1:是要修改的数据
|
|
uprole := new(RoleB)
|
|
uprole.RoleKey =t.RoleKey
|
|
uprole.Rolename = t.Rolename
|
|
uprole.Lastmodifytime = t.Lastmodifytime
|
|
uprole.Lastmodify=t.Lastmodify
|
|
uprole.Createtime=t.Createtime
|
|
uprole.Remark =t.Remark
|
|
uprole.Status=t.Status
|
|
uprole.RoleSort=t.RoleSort
|
|
uprole.DataScope=t.DataScope
|
|
|
|
//参数2:是修改的数据v
|
|
if _, err = e.Table(t.TableName()).Where("role_id =?",id).Update(uprole); err != nil {
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
//批量删除
|
|
func (t *Roletab) BatchDelete(id []int) (Result bool, err error) {
|
|
e := db.Eloquent.Master()
|
|
roles_str := utils.IDsToStringIn(id)
|
|
if _, err = e.Table("roletab").Where("role_id in ("+roles_str+")").Delete(&Roletab{}); err != nil {
|
|
return
|
|
}
|
|
Result = true
|
|
return
|
|
}
|
|
//批量查询
|
|
func (t *Roletab) GetRoles(roleIds []int) ([]string, error) {
|
|
e := db.Eloquent.Master()
|
|
role := make([]Roletab,0)
|
|
roleIds_str := utils.IDsToStringIn(roleIds)
|
|
if err := e.Table("roletab").Where("role_id in ("+roleIds_str+")").Find(&role); err != nil {
|
|
return nil,err
|
|
}
|
|
var rolekeys []string
|
|
for _,v:=range role{
|
|
rolekeys = append(rolekeys,v.RoleKey)
|
|
}
|
|
return rolekeys,nil
|
|
}
|