yxh 6 lat temu
rodzic
commit
821d597622
2 zmienionych plików z 249 dodań i 2 usunięć
  1. 116 2
      app/controller/admin/auth.go
  2. 133 0
      app/service/auth_service/auth_rule.go

+ 116 - 2
app/controller/admin/auth.go

@@ -4,8 +4,10 @@ import (
 	"fmt"
 	"gfast/app/model/auth_rule"
 	"gfast/app/model/role"
+	"gfast/app/model/user"
 	"gfast/app/service/auth_service"
 	"gfast/app/service/casbin_adapter_service"
+	"gfast/boot"
 	"gfast/library/response"
 	"gfast/library/utils"
 	"github.com/gogf/gf/frame/g"
@@ -94,7 +96,7 @@ func (c *Auth) DeleteMenu(r *ghttp.Request) {
 	ids := r.GetRequestArray("ids")
 	idsInterface := make(g.Slice, len(ids))
 	for k, v := range ids {
-		idsInterface[k] = gconv.Int(v)
+		idsInterface[k] = gconv.Int64(v)
 	}
 	_, err := auth_rule.Model.Where("id in(?)", idsInterface).Delete()
 	if err != nil {
@@ -107,7 +109,15 @@ func (c *Auth) DeleteMenu(r *ghttp.Request) {
 //角色列表
 func (c *Auth) RoleList(r *ghttp.Request) {
 	//获取角色列表
-
+	err, list := auth_service.GetRoleList("")
+	if err != nil {
+		g.Log().Error(err)
+		response.FailJson(true, r, "获取数据失败")
+	}
+	list = utils.ParentSonSort(list, 0, 0, "parent_id", "id", "flg", "name")
+	response.SusJson(true, r, "成功", g.Map{
+		"list": list,
+	})
 }
 
 //添加角色
@@ -233,3 +243,107 @@ func (c *Auth) EditRole(r *ghttp.Request) {
 	}
 	response.SusJson(true, r, "成功", res)
 }
+
+//删除角色
+func (c *Auth) DeleteRole(r *ghttp.Request) {
+	ids := r.GetRequestArray("ids")
+	idsInterface := make(g.Slice, len(ids))
+	for k, v := range ids {
+		idsInterface[k] = gconv.Int64(v)
+	}
+	tx, err := g.DB("default").Begin() //开启事务
+	if err != nil {
+		g.Log().Error(err)
+		response.FailJson(true, r, "事务处理失败")
+	}
+	_, err = tx.Table(role.Table).Where("id in(?)", idsInterface).Delete()
+	if err != nil {
+		g.Log().Error(err)
+		tx.Rollback()
+		response.FailJson(true, r, "删除失败")
+	}
+	//删除角色的权限
+	for _, v := range idsInterface {
+		err = auth_service.DeleteRoleRule(gconv.Int64(v))
+		if err != nil {
+			g.Log().Error(err)
+			tx.Rollback()
+			response.FailJson(true, r, "删除失败")
+		}
+	}
+	tx.Commit()
+	response.SusJson(true, r, "删除成功")
+}
+
+//添加管理员
+func (c *Auth) AddUser(r *ghttp.Request) {
+	if r.Method == "POST" {
+		requestData := r.GetFormMap()
+		InsertId, err := auth_service.AddUser(requestData)
+		if err != nil {
+			response.FailJson(true, r, err.Error())
+		}
+		//设置用户所属角色信息
+		err = auth_service.AddUserRole(requestData["role_id"], InsertId)
+		if err != nil {
+			g.Log().Error(err)
+			response.FailJson(true, r, "设置用户权限失败")
+		}
+		response.SusJson(true, r, "添加管理员成功")
+	}
+	//获取角色信息
+	err, roleList := auth_service.GetRoleList("")
+	if err != nil {
+		g.Log().Error(err)
+		response.FailJson(true, r, "获取角色数据失败")
+	}
+	roleList = utils.ParentSonSort(roleList, 0, 0, "parent_id", "id", "flg", "name")
+	res := g.Map{
+		"roleList": roleList,
+	}
+	response.SusJson(true, r, "成功", res)
+}
+
+//修改管理员
+func (c *Auth) EditUser(r *ghttp.Request) {
+	id := r.GetRequestInt64("id")
+	if r.Method == "POST" {
+		requestData := r.GetFormMap()
+		err := auth_service.EditUser(requestData)
+		if err != nil {
+			response.FailJson(true, r, err.Error())
+		}
+		//设置用户所属角色信息
+		err = auth_service.EditUserRole(requestData["role_id"], id)
+		if err != nil {
+			g.Log().Error(err)
+			response.FailJson(true, r, "设置用户权限失败")
+		}
+		response.SusJson(true, r, "修改管理员成功")
+	}
+	//用户用户信息
+	userEntity, err := user.Model.Where("id=?", id).One()
+	if err != nil {
+		g.Log().Error(err)
+		response.FailJson(true, r, "获取用户数据失败")
+	}
+	//获取角色信息
+	err, roleList := auth_service.GetRoleList("")
+	if err != nil {
+		g.Log().Error(err)
+		response.FailJson(true, r, "获取角色数据失败")
+	}
+	roleList = utils.ParentSonSort(roleList, 0, 0, "parent_id", "id", "flg", "name")
+	res := g.Map{
+		"roleList": roleList,
+		"userInfo": userEntity,
+	}
+	response.SusJson(true, r, "成功", res)
+}
+
+//用户列表
+func (c *Auth) UserList(r *ghttp.Request) {
+	resp := boot.AdminGfToken.GetTokenData(r)
+	g.Log().Debug(r.Router.Uri)
+	r.Response.Write("hello Index-", gconv.Map(resp.Get("data"))["user_nickname"])
+}

+ 133 - 0
app/service/auth_service/auth_rule.go

@@ -6,7 +6,9 @@ import (
 	"fmt"
 	"gfast/app/model/auth_rule"
 	"gfast/app/model/role"
+	"gfast/app/model/user"
 	"gfast/app/service/casbin_adapter_service"
+	"gfast/library/utils"
 	"github.com/gogf/gf/database/gdb"
 	"github.com/gogf/gf/errors/gerror"
 	"github.com/gogf/gf/frame/g"
@@ -190,6 +192,26 @@ func EditRoleRule(iRule interface{}, roleId int64) (err error) {
 	return
 }
 
+//删除角色权限操作
+func DeleteRoleRule(roleId int64) (err error) {
+	enforcer, e := casbin_adapter_service.GetEnforcer()
+	if e != nil {
+		err = e
+		return
+	}
+	//查询当前权限
+	gp := enforcer.GetFilteredNamedPolicy("p", 0, fmt.Sprintf("g_%d", roleId))
+	//删除旧权限
+	for _, v := range gp {
+		_, e = enforcer.RemovePolicy(v)
+		if e != nil {
+			err = e
+			return
+		}
+	}
+	return
+}
+
 func checkRoleData(params map[string]interface{}) error {
 	rules := []string{
 		"name@required|length:1,20#请填写角色名称|名称应在:min到:max个字符之间",
@@ -202,3 +224,114 @@ func checkRoleData(params map[string]interface{}) error {
 	}
 	return nil
 }
+
+//添加管理员操作
+func AddUser(data map[string]interface{}) (InsertId int64, err error) {
+	e := checkUserData(data, "add")
+	if e != nil {
+		err = gerror.New(e.(*gvalid.Error).FirstString())
+		return
+	}
+	if i, _ := user.Model.Where("user_name=?", data["user_name"]).Count(); i != 0 {
+		err = gerror.New("用户名已经存在")
+		return
+	}
+	if i, _ := user.Model.Where("mobile=?", data["mobile"]).Count(); i != 0 {
+		err = gerror.New("手机号已经存在")
+		return
+	}
+	//保存管理员信息
+	data["create_time"] = gtime.Timestamp()
+	//密码加密
+	data["user_password"] = utils.EncryptCBC(gconv.String(data["user_password"]), utils.AdminCbcPublicKey)
+	res, err := user.Model.Filter().Data(data).Save()
+	if err != nil {
+		return
+	}
+	InsertId, _ = res.LastInsertId()
+	return
+}
+
+//修改用户信息
+func EditUser(data map[string]interface{}) (err error) {
+	e := checkUserData(data, "add")
+	if e != nil {
+		err = gerror.New(e.(*gvalid.Error).FirstString())
+		return
+	}
+	if i, _ := user.Model.Where("id!=? and user_name=?", data["id"], data["user_name"]).Count(); i != 0 {
+		err = gerror.New("用户名已经存在")
+		return
+	}
+	if i, _ := user.Model.Where("id!=? and mobile=?", data["mobile"]).Count(); i != 0 {
+		err = gerror.New("手机号已经存在")
+		return
+	}
+	//保存管理员信息
+	//提交了密码?密码加密
+	if _, ok := data["user_password"]; ok {
+		data["user_password"] = utils.EncryptCBC(gconv.String(data["user_password"]), utils.AdminCbcPublicKey)
+	}
+	_, err = user.Model.Filter().Data(data).Save()
+	if err != nil {
+		return
+	}
+	return
+}
+
+//添加用户角色信息
+func AddUserRole(roleIds interface{}, userId int64) (err error) {
+	enforcer, e := casbin_adapter_service.GetEnforcer()
+	if e != nil {
+		err = e
+		return
+	}
+	rule := roleIds.([]interface{})
+	for _, v := range rule {
+		_, err = enforcer.AddGroupingPolicy(fmt.Sprintf("u_%d", userId), fmt.Sprintf("g_%s", v))
+		if err != nil {
+			return
+		}
+	}
+	return
+}
+
+//修改用户角色信息
+func EditUserRole(roleIds interface{}, userId int64) (err error) {
+	enforcer, e := casbin_adapter_service.GetEnforcer()
+	if e != nil {
+		err = e
+		return
+	}
+	rule := roleIds.([]interface{})
+	//删除用户旧角色信息
+	enforcer.RemoveFilteredGroupingPolicy(0, fmt.Sprintf("u_%d", userId))
+	for _, v := range rule {
+		_, err = enforcer.AddGroupingPolicy(fmt.Sprintf("u_%d", userId), fmt.Sprintf("g_%s", v))
+		if err != nil {
+			return
+		}
+	}
+	return
+}
+
+//验证用户表单数据
+func checkUserData(params map[string]interface{}, t string) error {
+	rules := []string{
+		"id@integer|min:1#管理员id必须为整数|管理员Id必须大于0",
+		"user_name@required|length:3,60#请填用户名|用户名应在:min到:max个字符之间",
+		"mobile@telephone#手机号码格式不正确",
+		"user_nickname@required|length:3,50#请填写姓名|姓名应在:min到:max个字符之间",
+		"user_email@email#邮箱格式错误",
+	}
+	if t == "add" {
+		rules = append(rules, "user_password@required|length:6,60#请填写密码|密码应在::min到:max个字符之间")
+	} else {
+		rules = append(rules, "user_password@length:6,60#密码应在::min到:max个字符之间")
+	}
+	e := gvalid.CheckMap(params, rules)
+	if e != nil {
+		return e
+	}
+	return nil
+}