fix(menu): 更新成功消息提示,添加角色管理页面权限分配说明;优化菜单添加逻辑,增加父菜单存在性和权限检查
This commit is contained in:
@@ -143,7 +143,7 @@ func (a *AuthorityMenuApi) AddBaseMenu(c *gin.Context) {
|
|||||||
err = menuService.AddBaseMenu(menu)
|
err = menuService.AddBaseMenu(menu)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.GVA_LOG.Error("添加失败!", zap.Error(err))
|
global.GVA_LOG.Error("添加失败!", zap.Error(err))
|
||||||
response.FailWithMessage("添加失败", c)
|
response.FailWithMessage("添加失败:"+err.Error(), c)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
response.OkWithMessage("添加成功", c)
|
response.OkWithMessage("添加成功", c)
|
||||||
|
@@ -134,10 +134,52 @@ func (menuService *MenuService) getBaseChildrenList(menu *system.SysBaseMenu, tr
|
|||||||
//@return: error
|
//@return: error
|
||||||
|
|
||||||
func (menuService *MenuService) AddBaseMenu(menu system.SysBaseMenu) error {
|
func (menuService *MenuService) AddBaseMenu(menu system.SysBaseMenu) error {
|
||||||
if !errors.Is(global.GVA_DB.Where("name = ?", menu.Name).First(&system.SysBaseMenu{}).Error, gorm.ErrRecordNotFound) {
|
return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
|
||||||
return errors.New("存在重复name,请修改name")
|
// 检查name是否重复
|
||||||
}
|
if !errors.Is(tx.Where("name = ?", menu.Name).First(&system.SysBaseMenu{}).Error, gorm.ErrRecordNotFound) {
|
||||||
return global.GVA_DB.Create(&menu).Error
|
return errors.New("存在重复name,请修改name")
|
||||||
|
}
|
||||||
|
|
||||||
|
if menu.ParentId != 0 {
|
||||||
|
// 检查父菜单是否存在
|
||||||
|
var parentMenu system.SysBaseMenu
|
||||||
|
if err := tx.First(&parentMenu, menu.ParentId).Error; err != nil {
|
||||||
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
return errors.New("父菜单不存在")
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查父菜单下现有子菜单数量
|
||||||
|
var existingChildrenCount int64
|
||||||
|
err := tx.Model(&system.SysBaseMenu{}).Where("parent_id = ?", menu.ParentId).Count(&existingChildrenCount).Error
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果父菜单原本是叶子菜单(没有子菜单),现在要变成枝干菜单,需要清空其权限分配
|
||||||
|
if existingChildrenCount == 0 {
|
||||||
|
// 检查父菜单是否被其他角色设置为首页
|
||||||
|
var defaultRouterCount int64
|
||||||
|
err := tx.Model(&system.SysAuthority{}).Where("default_router = ?", parentMenu.Name).Count(&defaultRouterCount).Error
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if defaultRouterCount > 0 {
|
||||||
|
return errors.New("父菜单已被其他角色的首页占用,请先释放父菜单的首页权限")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清空父菜单的所有权限分配
|
||||||
|
err = tx.Where("sys_base_menu_id = ?", menu.ParentId).Delete(&system.SysAuthorityMenu{}).Error
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建菜单
|
||||||
|
return tx.Create(&menu).Error
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
//@author: [piexlmax](https://github.com/piexlmax)
|
//@author: [piexlmax](https://github.com/piexlmax)
|
||||||
|
@@ -531,7 +531,7 @@
|
|||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
ElMessage({
|
ElMessage({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
message: '添加成功',
|
message: '添加成功,请到角色管理页面分配权限',
|
||||||
showClose: true
|
showClose: true
|
||||||
})
|
})
|
||||||
syncApiData.value.newApis = syncApiData.value.newApis.filter(
|
syncApiData.value.newApis = syncApiData.value.newApis.filter(
|
||||||
|
@@ -700,7 +700,7 @@
|
|||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
ElMessage({
|
ElMessage({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
message: isEdit.value ? '编辑成功' : '添加成功!'
|
message: isEdit.value ? '编辑成功' : '添加成功,请到角色管理页面分配权限'
|
||||||
})
|
})
|
||||||
getTableData()
|
getTableData()
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user