| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609 |
- package admin
- import (
- "fmt"
- "gfast/app/model/admin/auth_rule"
- "gfast/app/model/admin/role"
- "gfast/app/model/admin/sys_dept"
- "gfast/app/model/admin/user"
- "gfast/app/model/admin/user_post"
- "gfast/app/service/admin/auth_service"
- "gfast/app/service/admin/dept_service"
- "gfast/app/service/admin/dict_service"
- "gfast/app/service/admin/post_service"
- "gfast/app/service/admin/user_service"
- "gfast/app/service/cache_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"
- )
- //菜单用户组用户管理
- type Auth struct{}
- //菜单列表
- func (c *Auth) MenuList(r *ghttp.Request) {
- var req *auth_rule.ReqSearch
- //获取参数
- if err := r.Parse(&req); err != nil {
- response.FailJson(true, r, err.(*gvalid.Error).FirstString())
- }
- var listEntities []*auth_rule.Entity
- var err error
- if req != nil {
- listEntities, err = auth_service.GetMenuListSearch(req)
- } else {
- //获取菜单信息
- listEntities, err = auth_service.GetMenuList()
- }
- if err != nil {
- g.Log().Error(err)
- response.FailJson(true, r, "获取数据失败")
- }
- list := gconv.SliceMap(listEntities)
- if req != nil {
- for k := range list {
- list[k]["children"] = nil
- }
- } else {
- list = utils.PushSonToParent(list, 0, "pid", "id", "children", "", nil, true)
- }
- //菜单显示状态
- visibleOptions, err := dict_service.GetDictWithDataByType("sys_show_hide", "", "")
- if err != nil {
- response.FailJson(true, r, err.Error())
- }
- //菜单正常or停用状态
- statusOptions, err := dict_service.GetDictWithDataByType("sys_normal_disable", "", "")
- if err != nil {
- response.FailJson(true, r, err.Error())
- }
- response.SusJson(true, r, "成功", g.Map{
- "list": list,
- "visibleOptions": visibleOptions,
- "statusOptions": statusOptions,
- })
- }
- //菜单排序
- func (c *Auth) MenuSort(r *ghttp.Request) {
- sorts := r.Get("sorts")
- s := gconv.Map(sorts)
- if s == nil {
- response.FailJson(true, r, "排序失败")
- }
- for k, v := range s {
- auth_rule.Model.Where("id=?", k).Data("weigh", v).Update()
- }
- cache_service.New().RemoveByTag(cache_service.AdminAuthTag)
- response.SusJson(true, r, "排序成功")
- }
- //添加菜单
- func (c *Auth) AddMenu(r *ghttp.Request) {
- if r.Method == "POST" {
- menu := new(auth_rule.MenuReq)
- if err := r.Parse(menu); err != nil {
- response.FailJson(true, r, err.(*gvalid.Error).FirstString())
- }
- //判断菜单规则是否存在
- if !auth_service.CheckMenuNameUnique(menu.Name, 0) {
- response.FailJson(true, r, "菜单规则名称已经存在")
- }
- //判断路由是否已经存在
- if !auth_service.CheckMenuPathUnique(menu.Path, 0) {
- response.FailJson(true, r, "路由地址已经存在")
- }
- //保存到数据库
- err, _ := auth_service.AddMenu(menu)
- if err != nil {
- g.Log().Error(err)
- response.FailJson(true, r, "添加菜单失败")
- }
- //清除TAG缓存
- cache_service.New().RemoveByTag(cache_service.AdminAuthTag)
- response.SusJson(true, r, "添加菜单成功")
- }
- //获取父级菜单信息
- listEntities, err := auth_service.GetIsMenuList()
- if err != nil {
- response.FailJson(true, r, "获取数据失败")
- }
- response.SusJson(true, r, "成功", g.Map{"parentList": listEntities})
- }
- //修改菜单
- func (c *Auth) EditMenu(r *ghttp.Request) {
- id := r.GetInt("menuId")
- if r.Method == "POST" {
- menu := new(auth_rule.MenuReq)
- if err := r.Parse(menu); err != nil {
- response.FailJson(true, r, err.(*gvalid.Error).FirstString())
- }
- //判断菜单规则是否存在
- if !auth_service.CheckMenuNameUnique(menu.Name, id) {
- response.FailJson(true, r, "菜单规则名称已经存在")
- }
- //判断路由是否已经存在
- if !auth_service.CheckMenuPathUnique(menu.Path, id) {
- response.FailJson(true, r, "路由地址已经存在")
- }
- //保存到数据库
- err, _ := auth_service.EditMenu(menu, id)
- if err != nil {
- g.Log().Error(err)
- response.FailJson(true, r, "修改菜单失败")
- }
- //清除TAG缓存
- cache_service.New().RemoveByTag(cache_service.AdminAuthTag)
- response.SusJson(true, r, "修改菜单成功")
- }
- menuEntity, err := auth_rule.Model.Where("id=?", id).One()
- if err != nil {
- g.Log().Error(err)
- response.FailJson(true, r, "获取数据失败")
- }
- //获取父级菜单信息
- listEntities, err := auth_service.GetIsMenuList()
- if err != nil {
- response.FailJson(true, r, "获取数据失败")
- }
- list := gconv.SliceMap(listEntities)
- list = utils.ParentSonSort(list)
- response.SusJson(true, r, "成功", g.Map{
- "parentList": list,
- "menu": menuEntity,
- })
- }
- //删除菜单
- func (c *Auth) DeleteMenu(r *ghttp.Request) {
- ids := r.GetInts("ids")
- if len(ids) == 0 {
- response.FailJson(true, r, "删除失败,参数错误")
- }
- err := auth_service.DeleteMenuByIds(ids)
- if err != nil {
- g.Log().Error(err)
- response.FailJson(true, r, "删除失败")
- }
- //清除TAG缓存
- cache_service.New().RemoveByTag(cache_service.AdminAuthTag)
- response.SusJson(true, r, "删除成功")
- }
- //角色列表
- func (c *Auth) RoleList(r *ghttp.Request) {
- var req *role.SelectPageReq
- //获取参数
- if err := r.Parse(&req); err != nil {
- response.FailJson(true, r, err.(*gvalid.Error).FirstString())
- }
- //获取角色列表
- total, page, list, err := auth_service.GetRoleListSearch(req)
- if err != nil {
- g.Log().Error(err)
- response.FailJson(true, r, "获取数据失败")
- }
- //菜单正常or停用状态
- statusOptions, err := dict_service.GetDictWithDataByType("sys_normal_disable", "", "")
- if err != nil {
- response.FailJson(true, r, err.Error())
- }
- response.SusJson(true, r, "成功", g.Map{
- "currentPage": page,
- "total": total,
- "list": list,
- "searchTypes": statusOptions,
- })
- }
- //添加角色
- func (c *Auth) AddRole(r *ghttp.Request) {
- //添加操作
- if r.Method == "POST" {
- //获取表单提交的数据
- res := r.GetFormMap()
- 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(res["menuIds"], insertId)
- if err != nil {
- tx.Rollback() //回滚
- g.Log().Error(err.Error())
- response.FailJson(true, r, "添加角色失败")
- }
- tx.Commit()
- //清除TAG缓存
- cache_service.New().RemoveByTag(cache_service.AdminAuthTag)
- response.SusJson(true, r, "添加角色成功")
- }
- //获取菜单信息
- mListEntities, err := auth_service.GetMenuList()
- if err != nil {
- g.Log().Error(err)
- response.FailJson(true, r, "获取菜单数据失败")
- }
- var mList g.ListStrAny
- for _, entity := range mListEntities {
- m := g.Map{
- "id": entity.Id,
- "pid": entity.Pid,
- "label": entity.Title,
- }
- mList = append(mList, m)
- }
- mList = utils.PushSonToParent(mList)
- res := g.Map{
- "menuList": mList,
- }
- response.SusJson(true, r, "成功", res)
- }
- //修改角色
- func (c *Auth) EditRole(r *ghttp.Request) {
- id := r.GetRequestInt64("roleId")
- 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["menuIds"], id)
- if err != nil {
- tx.Rollback() //回滚
- g.Log().Error(err.Error())
- response.FailJson(true, r, "添加用户组失败")
- }
- tx.Commit()
- //清除TAG缓存
- cache_service.New().RemoveByTag(cache_service.AdminAuthTag)
- response.SusJson(true, r, "修改用户组成功")
- }
- //获取角色信息
- role, err := role.Model.Where("id=?", id).One()
- if err != nil {
- response.FailJson(true, r, "获取角色数据失败")
- }
- //获取菜单信息
- mListEntities, err := 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))
- gpSlice := make([]int, len(gp))
- for k, v := range gp {
- gpSlice[k] = gconv.Int(gstr.SubStr(v[1], 2))
- }
- var mList g.ListStrAny
- for _, entity := range mListEntities {
- m := g.Map{
- "id": entity.Id,
- "pid": entity.Pid,
- "label": entity.Title,
- }
- mList = append(mList, m)
- }
- mList = utils.PushSonToParent(mList)
- res := g.Map{
- "menuList": mList,
- "role": role,
- "checkedRules": gpSlice,
- }
- response.SusJson(true, r, "成功", res)
- }
- //删除角色
- func (c *Auth) DeleteRole(r *ghttp.Request) {
- ids := r.GetInts("ids")
- if len(ids) == 0 {
- response.FailJson(true, r, "删除失败,参数错误")
- }
- err := auth_service.DeleteRoleByIds(ids)
- if err != nil {
- response.FailJson(true, r, "删除失败,"+err.Error())
- }
- //清除TAG缓存
- cache_service.New().RemoveByTag(cache_service.AdminAuthTag)
- response.SusJson(true, r, "删除成功")
- }
- //添加管理员
- func (c *Auth) AddUser(r *ghttp.Request) {
- if r.Method == "POST" {
- var req *user.AddUserReq
- if err := r.Parse(&req); err != nil {
- response.FailJson(true, r, err.(*gvalid.Error).FirstString())
- }
- InsertId, err := auth_service.AddUser(req)
- if err != nil {
- response.FailJson(true, r, err.Error())
- }
- //设置用户所属角色信息
- err = auth_service.AddUserRole(req.PostIds, InsertId)
- if err != nil {
- g.Log().Error(err)
- response.FailJson(true, r, "设置用户权限失败")
- }
- //设置用户岗位
- err = auth_service.AddUserPost(req.PostIds, InsertId)
- if err != nil {
- g.Log().Error(err)
- response.FailJson(true, r, "设置用户岗位信息失败")
- }
- response.SusJson(true, r, "添加管理员成功")
- }
- //获取角色信息
- roleListEntities, err := auth_service.GetRoleList()
- if err != nil {
- g.Log().Error(err)
- response.FailJson(true, r, "获取角色数据失败")
- }
- //获取岗位信息
- posts, err := post_service.GetUsedPost()
- if err != nil {
- response.FailJson(true, r, err.Error())
- }
- res := g.Map{
- "roleList": roleListEntities,
- "posts": posts,
- }
- response.SusJson(true, r, "成功", res)
- }
- //修改管理员
- func (c *Auth) EditUser(r *ghttp.Request) {
- if r.Method == "POST" {
- var req *user.EditUserReq
- if err := r.Parse(&req); err != nil {
- response.FailJson(true, r, err.(*gvalid.Error).FirstString())
- }
- err := auth_service.EditUser(req)
- if err != nil {
- response.FailJson(true, r, err.Error())
- }
- //设置用户所属角色信息
- err = auth_service.EditUserRole(req.RoleIds, req.UserId)
- if err != nil {
- g.Log().Error(err)
- response.FailJson(true, r, "设置用户权限失败")
- }
- //设置用户岗位数据
- err = auth_service.AddUserPost(req.PostIds, gconv.Int64(req.UserId))
- if err != nil {
- g.Log().Error(err)
- response.FailJson(true, r, "设置用户岗位信息失败")
- }
- response.SusJson(true, r, "修改管理员成功")
- }
- id := r.GetRequestInt("id")
- //用户用户信息
- userEntity, err := user.Model.Where("id=?", id).One()
- if err != nil {
- g.Log().Error(err)
- response.FailJson(true, r, "获取用户数据失败")
- }
- //获取角色信息
- roleListEntities, err := auth_service.GetRoleList()
- if err != nil {
- g.Log().Error(err)
- response.FailJson(true, r, "获取角色数据失败")
- }
- //获取已选择的角色信息
- checkedRoleIds, err := user_service.GetAdminRoleIds(id)
- if err != nil {
- g.Log().Error(err)
- response.FailJson(true, r, "获取用户角色数据失败")
- }
- if checkedRoleIds == nil {
- checkedRoleIds = g.SliceInt{}
- }
- //获取岗位信息
- posts, err := post_service.GetUsedPost()
- if err != nil {
- response.FailJson(true, r, err.Error())
- }
- checkedPosts, err := user_service.GetAdminPosts(id)
- if err != nil {
- response.FailJson(true, r, err.Error())
- }
- if checkedPosts == nil {
- checkedPosts = []int64{}
- }
- res := g.Map{
- "roleList": roleListEntities,
- "userInfo": userEntity,
- "checkedRoleIds": checkedRoleIds,
- "posts": posts,
- "checkedPosts": checkedPosts,
- }
- response.SusJson(true, r, "成功", res)
- }
- //用户列表
- func (c *Auth) UserList(r *ghttp.Request) {
- var req *user.SearchReq
- //获取参数
- if err := r.Parse(&req); err != nil {
- response.FailJson(true, r, err.(*gvalid.Error).FirstString())
- }
- total, page, userList, err := user_service.GetAdminList(req)
- if err != nil {
- g.Log().Error(err)
- response.FailJson(true, r, "获取用户列表数据失败")
- }
- users := make([]g.Map, len(userList))
- //获取所有角色信息
- allRoles, err := auth_service.GetRoleList()
- if err != nil {
- g.Log().Error(err)
- response.FailJson(true, r, "获取用户角色数据失败")
- }
- //获取所有部门信息
- depts, err := dept_service.GetList(&sys_dept.SearchParams{})
- if err != nil {
- g.Log().Error(err)
- response.FailJson(true, r, "获取部门数据失败")
- }
- for k, u := range userList {
- var dept *sys_dept.Dept
- users[k] = gconv.Map(u)
- for _, d := range depts {
- if u.DeptId == d.DeptID {
- dept = d
- }
- }
- users[k]["dept"] = dept
- roles, err := user_service.GetAdminRole(u.Id, allRoles)
- if err != nil {
- g.Log().Error(err)
- response.FailJson(true, r, "获取用户角色数据失败")
- }
- roleInfo := make([]g.Map, 0, len(roles))
- for _, r := range roles {
- roleInfo = append(roleInfo, g.Map{"roleId": r.Id, "name": r.Name})
- }
- users[k]["user_status"] = gconv.String(u.UserStatus)
- users[k]["roleInfo"] = roleInfo
- }
- //用户状态
- statusOptions, err := dict_service.GetDictWithDataByType("sys_normal_disable", "", "")
- if err != nil {
- response.FailJson(true, r, err.Error())
- }
- //用户性别
- userGender, err := dict_service.GetDictWithDataByType("sys_user_sex", "", "")
- if err != nil {
- response.FailJson(true, r, err.Error())
- }
- res := g.Map{
- "total": total,
- "currentPage": page,
- "userList": users,
- "statusOptions": statusOptions,
- "userGender": userGender,
- }
- response.SusJson(true, r, "成功", res)
- }
- //删除管理员
- func (c *Auth) DeleteAdmin(r *ghttp.Request) {
- ids := r.GetInts("ids")
- if len(ids) > 0 {
- _, err := user.Model.Where("id in(?)", ids).Delete()
- if err != nil {
- g.Log().Error(err)
- response.FailJson(true, r, "删除失败")
- }
- } else {
- response.FailJson(true, r, "删除失败,参数错误")
- }
- //删除对应权限
- enforcer, err := casbin_adapter_service.GetEnforcer()
- if err == nil {
- for _, v := range ids {
- enforcer.RemoveFilteredGroupingPolicy(0, fmt.Sprintf("u_%d", v))
- }
- }
- //删除用户对应的岗位
- _, err = user_post.Delete(user_post.Columns.UserId+" in (?)", ids)
- if err != nil {
- g.Log().Error(err)
- }
- response.SusJson(true, r, "删除成功")
- }
- //设置角色状态
- func (c *Auth) StatusSetRole(r *ghttp.Request) {
- var req *role.StatusSetReq
- //获取参数
- if err := r.Parse(&req); err != nil {
- response.FailJson(true, r, err.(*gvalid.Error).FirstString())
- }
- err := auth_service.StatusSetRole(req)
- if err != nil {
- response.FailJson(true, r, err.Error())
- }
- response.SusJson(true, r, "状态设置成功")
- }
- //角色数据权限分配
- func (c *Auth) RoleDataScope(r *ghttp.Request) {
- var req *role.DataScopeReq
- //获取参数
- if err := r.Parse(&req); err != nil {
- response.FailJson(true, r, err.(*gvalid.Error).FirstString())
- }
- err := auth_service.RoleDataScope(req)
- if err != nil {
- response.FailJson(true, r, err.Error())
- }
- response.SusJson(true, r, "数据权限设置成功", req)
- }
- //修改用户状态
- func (c *Auth) ChangeUserStatus(r *ghttp.Request) {
- var req *user.StatusReq
- //获取参数
- if err := r.Parse(&req); err != nil {
- response.FailJson(true, r, err.(*gvalid.Error).FirstString())
- }
- if err := user_service.ChangeUserStatus(req); err != nil {
- response.FailJson(true, r, err.Error())
- } else {
- response.SusJson(true, r, "用户状态设置成功")
- }
- }
- //重置用户密码
- func (c *Auth) ResetUserPwd(r *ghttp.Request) {
- var req *user.ResetPwdReq
- //获取参数
- if err := r.Parse(&req); err != nil {
- response.FailJson(true, r, err.(*gvalid.Error).FirstString())
- }
- if err := user_service.ResetUserPwd(req); err != nil {
- response.FailJson(true, r, err.Error())
- } else {
- response.SusJson(true, r, "用户密码重置成功")
- }
- }
|