Files
gfast/app/system/api/sys_user.go
T

244 lines
5.7 KiB
Go

package api
import (
"gfast/app/system/model"
"gfast/app/system/service"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/net/ghttp"
"github.com/gogf/gf/util/gconv"
"github.com/gogf/gf/util/gvalid"
)
type user struct {
SystemBase
}
var User = new(user)
// UserList 获取用户列表
func (c *user) UserList(r *ghttp.Request) {
var req *model.SysUserSearchReq
if err := r.Parse(&req); err != nil {
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
}
if err := service.SysUser.WriteDeptIdsOfSearchReq(req); err != nil {
c.FailJsonExit(r, err.Error())
}
total, page, userList, err := service.SysUser.GetUserList(req)
if err != nil {
c.FailJsonExit(r, "获取用户列表数据失败")
}
users, err := service.SysUser.GetUsersRoleDept(userList)
if err != nil {
c.FailJsonExit(r, err.Error())
}
c.SusJsonExit(r, g.Map{
"total": total,
"currentPage": page,
"userList": users,
})
}
// Get 获取添加用户信息
func (c *user) Get(r *ghttp.Request) {
roleListEntities, err := service.SysRole.GetRoleList()
if err != nil {
g.Log().Error(err)
c.FailJsonExit(r, "获取角色数据失败")
}
posts, err := service.SysUser.GetUsedPost()
if err != nil {
c.FailJsonExit(r, err.Error())
}
c.SusJsonExit(r, g.Map{
"roleList": roleListEntities,
"posts": posts,
})
}
// AddUser 添加用户提交
func (c *user) AddUser(r *ghttp.Request) {
var req *model.AddUserReq
if err := r.Parse(&req); err != nil {
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
}
err := service.SysUser.AddUser(req)
if err != nil {
c.FailJsonExit(r, err.Error())
}
c.SusJsonExit(r, "添加管理员成功")
}
// GetEditUser 获取编辑的用户
func (c *user) GetEditUser(r *ghttp.Request) {
id := r.GetUint64("id")
res, err := service.SysUser.GetEditUser(id)
if err != nil {
c.FailJsonExit(r, err.Error())
}
c.SusJsonExit(r, res)
}
// UsersGet 获取用户信息列表
func (c *user) UsersGet(r *ghttp.Request) {
ids := r.GetInts("ids")
res, err := service.SysUser.GetUsers(ids)
if err != nil {
c.FailJsonExit(r, err.Error())
}
c.SusJsonExit(r, res)
}
// EditUser 编辑用户提交
func (c *user) EditUser(r *ghttp.Request) {
var req *model.EditUserReq
if err := r.Parse(&req); err != nil {
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
}
err := service.SysUser.EditUser(req)
if err != nil {
c.FailJsonExit(r, err.Error())
}
c.SusJsonExit(r, "修改管理员成功")
}
// GetInfo 获取登陆用户信息
func (c *user) GetInfo(r *ghttp.Request) {
userInfo := c.GetCurrentUser(r.Context())
rolesList := make([]string, 0, 10)
var permissions []string
userId := userInfo.Id
allRoles, err := service.SysRole.GetRoleList()
if err != nil {
c.FailJsonExit(r, err.Error())
}
roles, err := service.SysUser.GetAdminRole(userId, allRoles)
if err != nil {
c.FailJsonExit(r, err.Error())
}
name := make([]string, len(roles))
roleIds := make([]uint, len(roles))
for k, v := range roles {
name[k] = v.Name
roleIds[k] = v.Id
}
isSuperAdmin := false
service.SysUser.NotCheckAuthAdminIds.Iterator(func(v interface{}) bool {
if gconv.Uint64(v) == userId {
isSuperAdmin = true
return false
}
return true
})
if isSuperAdmin {
permissions = []string{"*/*/*"}
} else {
permissions, err = service.SysUser.GetPermissions(roleIds)
}
rolesList = name
c.SusJsonExit(r, g.Map{
"user": userInfo,
"roles": rolesList,
"permissions": permissions,
})
}
// GetRouters 获取用户菜单
func (c *user) GetRouters(r *ghttp.Request) {
//获取用户信息
userInfo := c.GetCurrentUser(r.Context())
//是否超管
isSuperAdmin := false
userId := userInfo.Id
//获取无需验证权限的用户id
service.SysUser.NotCheckAuthAdminIds.Iterator(func(v interface{}) bool {
if gconv.Uint64(v) == userId {
isSuperAdmin = true
return false
}
return true
})
//获取用户角色信息
allRoles, err := service.SysRole.GetRoleList()
if err != nil {
c.FailJsonExit(r, err.Error())
}
roles, e := service.SysUser.GetAdminRole(userId, allRoles)
if e != nil {
c.FailJsonExit(r, e.Error())
}
name := make([]string, len(roles))
roleIds := make([]uint, len(roles))
for k, v := range roles {
name[k] = v.Name
roleIds[k] = v.Id
}
var menuList []service.UserMenus
//获取菜单信息
if isSuperAdmin {
//超管获取所有菜单
menuList, err = service.SysUser.GetAllMenus()
} else {
menuList, err = service.SysUser.GetAdminMenusByRoleIds(roleIds)
}
if err != nil {
c.FailJsonExit(r, e.Error())
}
if menuList == nil {
menuList = make([]service.UserMenus, 0)
}
adminMenus := make([]service.UserMenus, 0, len(menuList))
//过滤非后台模块的菜单
for _, v := range menuList {
if v.ModuleType == "sys_admin" {
adminMenus = append(adminMenus, v)
}
}
c.SusJsonExit(r, adminMenus)
}
func (c *user) ResetUserPwd(r *ghttp.Request) {
var req *model.SysUserResetPwdReq
//获取参数
if err := r.Parse(&req); err != nil {
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
}
if err := service.SysUser.ResetUserPwd(req); err != nil {
c.FailJsonExit(r, err.Error())
} else {
c.SusJsonExit(r, "用户密码重置成功")
}
}
func (c *user) ChangeUserStatus(r *ghttp.Request) {
var req *model.SysUserStatusReq
//获取参数
if err := r.Parse(&req); err != nil {
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
}
if err := service.SysUser.ChangeUserStatus(req); err != nil {
c.FailJsonExit(r, err.Error())
} else {
c.SusJsonExit(r, "用户状态设置成功")
}
}
func (c *user) DeleteUser(r *ghttp.Request) {
ids := r.GetInts("ids")
if len(ids) > 0 {
err := service.SysUser.DeleteUser(r.GetCtx(), ids)
if err != nil {
g.Log().Error(err)
c.FailJsonExit(r, "删除失败")
}
} else {
c.FailJsonExit(r, "删除失败,参数错误")
}
c.SusJsonExit(r, "删除成功")
}