diff --git a/api/controller/dept.go b/api/controller/dept.go index 5f0a7af..789f184 100644 --- a/api/controller/dept.go +++ b/api/controller/dept.go @@ -26,8 +26,7 @@ func (r *Dept) GetDeptList(c *gin.Context) { return } -// -// // AddDept 新增部门 +// AddDept 新增部门 // func (r *Dept) AddDept(c *gin.Context) { // deptRequest := requests.DeptRequest{} // if err := c.ShouldBind(&deptRequest.AddDept); err != nil { @@ -43,13 +42,14 @@ func (r *Dept) GetDeptList(c *gin.Context) { // // // 业务处理 // deptService := service.DeptService{} -// _, err := deptService.AddDept(c, deptRequest.AddDept) +// _, err := deptService.AddDept(deptRequest.AddDept) // if err != nil { // responses.FailWithMessage(err.Error(), c) // return // } // responses.Ok(c) // } + // // // GetDept 部门详情 // func (r *Dept) GetDept(c *gin.Context) { diff --git a/api/controller/role.go b/api/controller/role.go index fa26ba5..4725994 100644 --- a/api/controller/role.go +++ b/api/controller/role.go @@ -22,9 +22,17 @@ func (r *Role) GetRoleMenuList(c *gin.Context) { return } + roleService := service.RoleService{} + + // 获取角色身份 + isAdmin, err := roleService.GetRoleIden(c) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + // 获取角色菜单 - RoleService := service.RoleService{} - roleMenuList, err := RoleService.GetRoleMenuList(roleId) + roleMenuList, err := roleService.GetRoleMenuList(roleId, isAdmin) if err != nil { responses.FailWithMessage(err.Error(), c) return diff --git a/api/dao/adminDept.go b/api/dao/adminDept.go index 69cb281..20d912c 100644 --- a/api/dao/adminDept.go +++ b/api/dao/adminDept.go @@ -1,6 +1,7 @@ package dao import ( + "gorm.io/gorm" "hospital-admin-api/api/model" "hospital-admin-api/global" ) @@ -8,8 +9,8 @@ import ( type AdminDeptDao struct { } -// GetAdminDeptFirstById 获取部门数据-部门id -func (r *AdminDeptDao) GetAdminDeptFirstById(deptId int64) (m *model.AdminDept, err error) { +// GetAdminDeptById 获取部门数据-部门id +func (r *AdminDeptDao) GetAdminDeptById(deptId int64) (m *model.AdminDept, err error) { err = global.Db.First(&m, deptId).Error if err != nil { return nil, err @@ -25,3 +26,11 @@ func (r *AdminDeptDao) GetAdminDeptList() (m []*model.AdminDept, err error) { } return m, nil } + +// AddAdminDept 新增接口 +func (r *AdminApiDao) AddAdminDept(tx *gorm.DB, model *model.AdminAPI) (*model.AdminAPI, error) { + if err := tx.Create(model).Error; err != nil { + return nil, err + } + return model, nil +} diff --git a/api/dao/adminMenu.go b/api/dao/adminMenu.go index ea12747..d8bfe4c 100644 --- a/api/dao/adminMenu.go +++ b/api/dao/adminMenu.go @@ -69,3 +69,14 @@ func (r *AdminMenuDao) DeleteAdminMenuByMenuId(tx *gorm.DB, menuId int64) error } return nil } + +// GetAdminMenuId 获取所有菜单id +func (r *AdminMenuDao) GetAdminMenuId() (m []int64, err error) { + err = global.Db.Model(&model.AdminMenu{}). + Pluck("menu_id", &m). + Error + if err != nil { + return nil, err + } + return m, nil +} diff --git a/api/requests/dept.go b/api/requests/dept.go index 773a0a7..53ded77 100644 --- a/api/requests/dept.go +++ b/api/requests/dept.go @@ -8,7 +8,7 @@ type DeptRequest struct { // AddDept 新增部门 type AddDept struct { - ParentId int64 `json:"parent_id" form:"parent_id" validate:"required" label:"上级部门"` // 本表父级id + ParentId string `json:"parent_id" form:"parent_id" validate:"required" label:"上级部门"` // 本表父级id DeptName string `json:"dept_name" form:"dept_name" validate:"required" label:"部门名称"` DeptStatus int `json:"dept_status" form:"dept_status" validate:"required,oneof=1 2" label:"部门状态"` // (1:正常 2:删除) } diff --git a/api/service/dept.go b/api/service/dept.go index 3f2a0c1..bcc5daf 100644 --- a/api/service/dept.go +++ b/api/service/dept.go @@ -48,3 +48,83 @@ func (r *DeptService) GetDeptList() ([]*deptResponse.GetDeptList, error) { return deptTree, nil } + +// AddDept 新增部门 +// func (r *DeptService) AddDept(addDeptRequest requests.AddDept) (bool, error) { +// adminDeptDao := dao.AdminDeptDao{} +// +// parentId, err := strconv.ParseInt(addDeptRequest.ParentId, 10, 64) +// if err != nil { +// return false, errors.New("新增失败") +// } +// +// // 判断父级id +// if parentId != 0 { +// adminDept, _ := adminDeptDao.GetAdminDeptById(parentId) +// if adminDept == nil { +// return false, errors.New("上级部门错误") +// } +// } +// +// // 开始事务 +// tx := global.Db.Begin() +// defer func() { +// if r := recover(); r != nil { +// tx.Rollback() +// } +// }() +// +// // 新增菜单 +// AdminMenuModel := &model.AdminMenu{ +// MenuName: AddMenuRequest.MenuName, +// MenuTitle: AddMenuRequest.MenuTitle, +// ParentId: ParentId, +// MenuStatus: AddMenuRequest.MenuStatus, +// MenuType: AddMenuRequest.MenuType, +// Permission: AddMenuRequest.Permission, +// OrderNum: AddMenuRequest.OrderNum, +// Icon: AddMenuRequest.Icon, +// Path: AddMenuRequest.Path, +// Component: AddMenuRequest.Component, +// } +// +// adminMenu, _ := AdminMenuDao.AddAdminMenu(tx, AdminMenuModel) +// if adminMenu == nil { +// tx.Rollback() +// return false, errors.New("新增失败") +// } +// +// // 新增菜单api +// if len(AddMenuRequest.ApiIds) > 0 { +// for _, v := range AddMenuRequest.ApiIds { +// // 将字符串转换为int64类型 +// v, err := strconv.ParseInt(v, 10, 64) +// if err != nil { +// tx.Rollback() +// return false, errors.New("新增失败") +// } +// +// // 检测api +// adminApi, _ := AdminApiDao.GetAdminApiById(v) +// if adminApi == nil { +// tx.Rollback() +// return false, errors.New("接口不存在") +// } +// +// AdminMenuApiModel := &model.AdminMenuApi{ +// MenuId: adminMenu.MenuId, +// ApiId: v, +// } +// +// adminMenuApi, _ := AdminMenuApiDao.AddAdminMenuApi(tx, AdminMenuApiModel) +// if adminMenuApi == nil { +// tx.Rollback() +// return false, errors.New("新增失败") +// } +// } +// } +// +// tx.Commit() +// +// return true, nil +// } diff --git a/api/service/role.go b/api/service/role.go index e5debc9..54b28a0 100644 --- a/api/service/role.go +++ b/api/service/role.go @@ -14,35 +14,39 @@ import ( type RoleService struct{} // GetRoleMenuList 获取角色菜单 -func (r *RoleService) GetRoleMenuList(roleId int64) ([]*roleResponse.GetRoleMenuList, error) { +func (r *RoleService) GetRoleMenuList(roleId int64, isAdmin bool) ([]*roleResponse.GetRoleMenuList, error) { // 获取角色菜单 AdminRoleMenuDao := dao.AdminRoleMenuDao{} - adminRoleMenu, _ := AdminRoleMenuDao.GetAdminRoleMenuListByRoleId(roleId) - if adminRoleMenu == nil { - return []*roleResponse.GetRoleMenuList{}, nil + AdminMenuDao := dao.AdminMenuDao{} + var menuIDs []int64 + var err error + + if isAdmin { + // 超级管理员 + menuIDs, err = AdminMenuDao.GetAdminMenuId() + if err != nil { + return []*roleResponse.GetRoleMenuList{}, nil + } + } else { + menuIDs, err = AdminRoleMenuDao.GetAdminRoleMenuIdByRoleId(roleId) + if err != nil { + return []*roleResponse.GetRoleMenuList{}, nil + } } // 获取全部正常菜单列表 - AdminMenuDao := dao.AdminMenuDao{} adminMenu, _ := AdminMenuDao.GetAdminMenuListNormalSortOrderNum() if adminMenu == nil { return []*roleResponse.GetRoleMenuList{}, nil } - var menuIDs []int64 var menuTree []*roleResponse.GetRoleMenuList - if len(adminRoleMenu) > 0 { - for _, roleMenu := range adminRoleMenu { - menuIDs = append(menuIDs, roleMenu.MenuID) - } - - if len(menuIDs) > 0 { - // 构建菜单树 - menuTree = buildMenuTree(menuIDs, adminMenu) - if menuTree == nil { - return nil, nil - } + if len(menuIDs) > 0 { + // 构建菜单树 + menuTree = buildMenuTree(menuIDs, adminMenu) + if menuTree == nil { + return nil, nil } } @@ -388,3 +392,23 @@ func (r *RoleService) DeleteRole(c *gin.Context, DeleteRoleRequest requests.Dele return true, nil } + +// GetRoleIden 获取角色身份 +func (r *RoleService) GetRoleIden(c *gin.Context) (bool, error) { + roleId := c.GetInt64("RoleId") + if roleId == 0 { + return false, errors.New("角色错误") + } + + // 获取当前登陆接口角色数据 + adminRoleDao := dao.AdminRoleDao{} + adminRole, err := adminRoleDao.GetAdminRoleFirstById(roleId) + if err != nil || adminRole == nil { + return false, errors.New("非法操作") + } + + if adminRole.IsAdmin == 0 { + return false, nil + } + return true, nil +} diff --git a/api/service/user.go b/api/service/user.go index de23226..92d91ad 100644 --- a/api/service/user.go +++ b/api/service/user.go @@ -73,7 +73,7 @@ func (r *UserService) AddUser(c *gin.Context, AddUserRequest requests.AddUser) ( return false, errors.New("部门错误") } - adminDept, err := AdminDeptDao.GetAdminDeptFirstById(deptID) + adminDept, err := AdminDeptDao.GetAdminDeptById(deptID) if err != nil || adminDept == nil { return false, errors.New("部门错误") } @@ -284,7 +284,7 @@ func (r *UserService) PutUser(c *gin.Context, requestUserId int64, putUserReques if deptID != adminUser.DeptID { adminDeptDao := dao.AdminDeptDao{} - res, err := adminDeptDao.GetAdminDeptFirstById(deptID) + res, err := adminDeptDao.GetAdminDeptById(deptID) if err != nil || res == nil { return false, errors.New("部门错误") }