|
|
- package models
-
- import (
- "LAPP_SJA_ME/db"
- "LAPP_SJA_ME/utils"
- "fmt"
- "log"
- )
-
-
- /***
- *CreateBy:lou
- *Date:2020/5/15
- *TableName:角色关联表
- **********/
-
- type RoleMenu struct {
- RoleId int `xorm:"int(11) pk comment('角色ID')" form:"role_id" json:"role_id"`
- MenuId int `xorm:"int(11) pk comment('菜单ID')" form:"menu_id" json:"menu_id"`
- RoleName string `xorm:"comment('角色代码') VARCHAR(14)" form:"rolename" json:"rolename"`
- Createtime string `xorm:"comment('创建时间') VARCHAR(14)" form:"createtime" json:"createtime"`
- Lastmodifytime string `xorm:"comment('最近一次更新时间') VARCHAR(14)" form:"lastmodifytime" json:"lastmodifytime"`
- Lastmodify string `xorm:"comment('最近一次更新人员') VARCHAR(40)" form:"lastmodify" json:"lastmodify"`
- }
-
- type MenuPath struct {
- Path string `json:"path"`
- }
-
- func (rm *RoleMenu) TableName() string {
- return "role_menu"
- }
-
- func (rm *RoleMenu) Get() ([]RoleMenu, error) {
- var r []RoleMenu
- e := db.Eloquent.Master()
- table := e.Table("role_menu")
- if rm.RoleId != 0 {
- table = table.Where("role_id = ?", rm.RoleId)
-
- }
- if _,err := table.Get(&r); err != nil {
- return nil, err
- }
- return r, nil
- }
-
- func (rm *RoleMenu) GetPermis() ([]string, error) {
- var r []Menu
-
- e := db.Eloquent.Master()
- err := e.SQL("select menu.permission from menu left join role_menu on role_menu.menu_id=menu.menu_id where role_menu.role_id=? and menu.menu_type in ('F','C')", rm.RoleId).Find(&r)
-
- if err != nil {
- return nil, err
- }
- var list []string
- for i := 0; i < len(r); i++ {
- list = append(list, r[i].Permission)
- }
- return list, nil
- }
-
- func (rm *RoleMenu) GetIDS() ([]MenuPath, error) {
- var r []MenuPath
- e := db.Eloquent.Master()
- table := e.Select("menu.path").Table("role_menu")
- table = table.Join("LEFT", "roletab", "roletab.role_id=role_menu.role_id")
- table = table.Join("LEFT", "menu", "menu.id=role_menu.menu_id")
- table = table.Where("roletab.role_name = ? and menu.type=1", rm.RoleName)
- if err := table.Find(&r); err != nil {
- return nil, err
- }
- return r, nil
- }
- func (rm *RoleMenu) DeleteRoleMenu(roleId int) (bool, error) {
- e := db.Eloquent.Master()
- if _,err := e.Table("role_menu").Where("role_id = ?", roleId).Delete(&RoleMenu{}); err != nil {
- return false, err
- }
- var role Roletab
- if _,err := e.Table("roletab").Where("role_id = ?", roleId).Get(&role); err != nil {
- return false, err
- }
- //删除casbin_rule
- sql3 := "delete from casbin_rule where v0= '" + role.RoleKey + "'"
- _,err:=e.Exec(sql3)
- if err != nil{
- return false, err
- }
- return true, nil
-
- }
-
- func (rm *RoleMenu) BatchDeleteRoleMenu(roleIds []int,rolekeys []string) (bool, error) {
- e := db.Eloquent.Master()
- roleIds_str := utils.IDsToStringIn(roleIds)
- if _,err := e.Table("role_menu").Where("role_id in ("+roleIds_str+")").Delete(&RoleMenu{}); err != nil {
- return false, err
- }
- //添加到casbin_rule中
- str := utils.IDsToStrings(rolekeys)
- sql := "delete from casbin_rule where v0 in ("+str+")"
- _,err:=e.Exec(sql)
- if err != nil{
- return false, err
- }
- return true, nil
-
- }
- func (rm *RoleMenu) Insert(roleId int, menuId []int) (bool, error) {
- var role Roletab
- e := db.Eloquent.Master()
- if _, err := e.Table("roletab").Where("role_id = ?", roleId).Get(&role); err != nil {
- log.Printf("查询错误err1:%v",err)
- return false, err
- }
- var menu []Menu
- menustr := utils.IDsToStringIn(menuId)
-
- log.Println(menustr)
- if err := e.SQL("select * from menu where menu_id in ("+menustr+")").Find(&menu); err != nil {
- return false, err
- }
- //ORM不支持批量插入所以需要拼接 sql 串
- sql := "INSERT INTO `role_menu` (`role_id`,`menu_id`,`role_name`) VALUES "
-
- sql2 := "INSERT INTO casbin_rule (`p_type`,`v0`,`v1`,`v2`) VALUES "
- for i := 0; i < len(menu); i++ {
- if len(menu)-1 == i {
- //最后一条数据 以分号结尾
- sql += fmt.Sprintf("(%d,%d,'%s')", role.RoleId, menu[i].MenuId, role.RoleKey)
- if menu[i].MenuType == "A" {
- sql2 += fmt.Sprintf("('p','%s','%s','%s')", role.RoleKey, menu[i].Path, menu[i].Action)
- }
- } else {
- sql += fmt.Sprintf("(%d,%d,'%s'),", role.RoleId, menu[i].MenuId, role.RoleKey)
- if menu[i].MenuType == "A" {
- sql2 += fmt.Sprintf("('p','%s','%s','%s'),", role.RoleKey, menu[i].Path, menu[i].Action)
- }
- }
- }
- _,err := e.Exec(sql)
- if err !=nil{
- log.Printf("role添加错误:%v",err)
- }
- _,err = e.Exec(sql2)
- if err !=nil{
- log.Printf("casbin_role添加错误:%v",err)
- }
- return true, nil
- }
- func (rm *RoleMenu) Delete(RoleId string, MenuID string) (bool, error) {
- e := db.Eloquent.Master()
- rm.RoleId = utils.ValueToInt(RoleId,0)
- table := e.Table("role_menu").Where("role_id = ?", RoleId)
- if MenuID != "" {
- table = table.Where("menu_id = ?", MenuID)
- }
- if _,err := table.Delete(&rm); err != nil {
- return false, err
- }
- return true, nil
- }
|