sys_authority.go 2.0 KB
Newer Older
1
package sysModel
Mr.奇淼('s avatar
Mr.奇淼( 已提交
2 3

import (
Mr.奇淼('s avatar
Mr.奇淼( 已提交
4 5 6
	"gin-vue-admin/controller/servers"
	"gin-vue-admin/init/qmsql"
	"gin-vue-admin/model/modelInterface"
Mr.奇淼('s avatar
Mr.奇淼( 已提交
7
	"github.com/jinzhu/gorm"
Mr.奇淼('s avatar
Mr.奇淼( 已提交
8
	"github.com/pkg/errors"
Mr.奇淼('s avatar
Mr.奇淼( 已提交
9 10
)

11
type SysAuthority struct {
Mr.奇淼('s avatar
Mr.奇淼( 已提交
12
	gorm.Model
Mr.奇淼('s avatar
Mr.奇淼( 已提交
13 14 15 16
	AuthorityId   string         `json:"authorityId" gorm:"not null;unique"`
	AuthorityName string         `json:"authorityName"`
	ParentId      string         `json:"parentId"`
	Children      []SysAuthority `json:"children"`
Mr.奇淼('s avatar
Mr.奇淼( 已提交
17 18
}

Mr.奇淼('s avatar
Mr.奇淼( 已提交
19
// 创建角色
20
func (a *SysAuthority) CreateAuthority() (err error, authority *SysAuthority) {
Mr.奇淼('s avatar
Mr.奇淼( 已提交
21 22 23
	err = qmsql.DEFAULTDB.Create(a).Error
	return err, a
}
Mr.奇淼('s avatar
Mr.奇淼( 已提交
24 25

// 删除角色
26 27
func (a *SysAuthority) DeleteAuthority() (err error) {
	err = qmsql.DEFAULTDB.Where("authority_id = ?", a.AuthorityId).Find(&SysUser{}).Error
Mr.奇淼('s avatar
Mr.奇淼( 已提交
28
	if err != nil {
Mr.奇淼('s avatar
Mr.奇淼( 已提交
29 30 31 32 33 34 35
		err = qmsql.DEFAULTDB.Where("parentId = ?", a.AuthorityId).Find(&SysAuthority{}).Error
		if err != nil {
			err = qmsql.DEFAULTDB.Where("authority_id = ?", a.AuthorityId).First(a).Unscoped().Delete(a).Error
			new(CasbinModel).clearCasbin(0, a.AuthorityId)
		} else {
			err = errors.New("此角色存在子角色不允许删除")
		}
Mr.奇淼('s avatar
Mr.奇淼( 已提交
36 37 38 39 40
	} else {
		err = errors.New("此角色有用户正在使用禁止删除")
	}
	return err
}
41 42

// 分页获取数据  需要分页实现这个接口即可
43
func (a *SysAuthority) GetInfoList(info modelInterface.PageInfo) (err error, list interface{}, total int) {
44 45 46 47 48
	// 封装分页方法 调用即可 传入 当前的结构体和分页信息
	err, db, total := servers.PagingServer(a, info)
	if err != nil {
		return
	} else {
49
		var authority []SysAuthority
Mr.奇淼('s avatar
Mr.奇淼( 已提交
50 51 52 53 54 55
		err = db.Where("parent_id = 0").Find(&authority).Error
		if len(authority) > 0 {
			for k, _ := range authority {
				err = findChildrenAuthority(&authority[k])
			}
		}
56 57
		return err, authority, total
	}
58
}
Mr.奇淼('s avatar
Mr.奇淼( 已提交
59 60 61 62 63 64 65 66 67 68

func findChildrenAuthority(authority *SysAuthority) (err error) {
	err = qmsql.DEFAULTDB.Where("parent_id = ?", authority.AuthorityId).Find(&authority.Children).Error
	if len(authority.Children) > 0 {
		for k, _ := range authority.Children {
			err = findChildrenAuthority(&authority.Children[k])
		}
	}
	return err
}