角色添加、修改,权限分配,权限过滤。

This commit is contained in:
yxh
2020-02-06 23:15:09 +08:00
parent 7454d077b9
commit 106c9da718
3 changed files with 165 additions and 20 deletions
+90 -11
View File
@@ -1,12 +1,16 @@
package admin
import (
"fmt"
"gfast/app/model/auth_rule"
"gfast/app/model/role"
"gfast/app/service/auth_service"
"gfast/app/service/casbin_adapter_service"
"gfast/library/response"
"gfast/library/utils"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/net/ghttp"
"github.com/gogf/gf/text/gstr"
"github.com/gogf/gf/util/gconv"
"github.com/gogf/gf/util/gvalid"
)
@@ -100,39 +104,39 @@ func (c *Auth) DeleteMenu(r *ghttp.Request) {
response.SusJson(true, r, "删除成功")
}
//添加用户组
func (c *Auth) AddGroup(r *ghttp.Request) {
//角色列表
func (c *Auth) RoleList(r *ghttp.Request) {
//获取角色列表
}
//添加角色
func (c *Auth) AddRole(r *ghttp.Request) {
//添加操作
if r.Method == "POST" {
/*enforcer,err:=casbin_adapter_service.GetEnforcer()
if err!=nil{
g.Log().Error(err.Error())
response.FailJson(true, r, "权限适配器获取失败")
}
ss:=enforcer.GetPolicy()*/
//获取表单提交的数据
res := r.GetFormMap()
//添加角色获取添加的id
tx, err := g.DB("default").Begin() //开启事务
if err != nil {
g.Log().Error(err)
response.FailJson(true, r, "事务处理失败")
}
//插入角色
//添加角色获取添加的id
insertId, err := auth_service.AddRole(tx, res)
if err != nil {
tx.Rollback() //回滚
response.FailJson(true, r, err.Error())
}
//添加角色权限
err = auth_service.AddRoleRule(tx, res["rule"], insertId)
err = auth_service.AddRoleRule(res["rule"], insertId)
if err != nil {
tx.Rollback() //回滚
g.Log().Error(err.Error())
response.FailJson(true, r, "添加用户组失败")
}
tx.Commit()
response.SusJson(true, r, "添加用户组成功", insertId, res)
response.SusJson(true, r, "添加用户组成功")
}
//获取父级组
err, pList := auth_service.GetRoleList("")
@@ -154,3 +158,78 @@ func (c *Auth) AddGroup(r *ghttp.Request) {
}
response.SusJson(true, r, "成功", res)
}
//修改角色
func (c *Auth) EditRole(r *ghttp.Request) {
id := r.GetRequestInt64("id")
if r.Method == "POST" {
//获取表单提交的数据
res := r.GetFormMap()
tx, err := g.DB("default").Begin() //开启事务
if err != nil {
g.Log().Error(err)
response.FailJson(true, r, "事务处理失败")
}
//修改角色信息
err = auth_service.EditRole(tx, res)
if err != nil {
tx.Rollback() //回滚
response.FailJson(true, r, err.Error())
}
//添加角色权限
err = auth_service.EditRoleRule(res["rule"], id)
if err != nil {
tx.Rollback() //回滚
g.Log().Error(err.Error())
response.FailJson(true, r, "添加用户组失败")
}
tx.Commit()
response.SusJson(true, r, "修改用户组成功")
}
//获取角色信息
role, err := role.Model.Where("id=?", id).One()
if err != nil {
response.FailJson(true, r, "获取角色数据失败")
}
//获取父级组
err, pList := auth_service.GetRoleList("")
if err != nil {
g.Log().Error(err)
response.FailJson(true, r, "获取父级数据失败")
}
pList = utils.ParentSonSort(pList, 0, 0, "parent_id", "id", "flg", "name")
//获取菜单信息
err, mList := auth_service.GetMenuList("")
if err != nil {
g.Log().Error(err)
response.FailJson(true, r, "获取菜单数据失败")
}
//获取角色关联的菜单规则
enforcer, err := casbin_adapter_service.GetEnforcer()
if err != nil {
g.Log().Error(err)
response.FailJson(true, r, "获取权限处理器失败")
}
gp := enforcer.GetFilteredNamedPolicy("p", 0, fmt.Sprintf("g_%d", id))
g.Log().Debug(gp)
gpMap := map[int64]int64{}
for _, v := range gp {
gpMap[gconv.Int64(gstr.SubStr(v[1], 2))] = gconv.Int64(gstr.SubStr(v[1], 2))
}
//关联选中的权限
for k, v := range mList {
if _, has := gpMap[gconv.Int64(v["id"])]; has {
v["isChecked"] = true
} else {
v["isChecked"] = false
}
mList[k] = v
}
mList = utils.PushSonToParent(mList)
res := g.Map{
"parentList": pList,
"menuList": mList,
"role": role,
}
response.SusJson(true, r, "成功", res)
}