diff --git a/GQA-BACKEND/service/private/api.go b/GQA-BACKEND/service/private/api.go
index e16f9e5..9b95099 100644
--- a/GQA-BACKEND/service/private/api.go
+++ b/GQA-BACKEND/service/private/api.go
@@ -5,6 +5,7 @@ import (
"github.com/Junvary/gin-quasar-admin/GQA-BACKEND/global"
"github.com/Junvary/gin-quasar-admin/GQA-BACKEND/model"
"github.com/Junvary/gin-quasar-admin/GQA-BACKEND/utils"
+ "gorm.io/gorm"
)
type ServiceApi struct{}
@@ -33,8 +34,31 @@ func (s *ServiceApi) EditApi(toEditApi model.SysApi) (err error) {
if toEditApi.Stable == "yesNo_yes" {
return errors.New(utils.GqaI18n("StableCantDo"))
}
- err = global.GqaDb.Save(&toEditApi).Error
- return err
+ return global.GqaDb.Transaction(func(tx *gorm.DB) error {
+ var oldApi model.SysApi
+ if err = tx.Where("id = ?", toEditApi.Id).First(&oldApi).Error; err != nil {
+ return err
+ }
+ if err = tx.Save(&toEditApi).Error; err != nil {
+ return err
+ }
+ var oldRoleApiList []model.SysRoleApi
+ if err = tx.Where("api_group = ? and api_method = ? and api_path = ?", oldApi.ApiGroup, oldApi.ApiMethod, oldApi.ApiPath).
+ Find(&oldRoleApiList).Error; err != nil {
+ return err
+ }
+ // 将oldRoleApiList中的ApiGroup、ApiMethod、ApiPath替换成toEditApi中的ApiGroup、ApiMethod、ApiPath并保存回数据库
+ for _, oldRoleApi := range oldRoleApiList {
+ oldRoleApi.ApiGroup = toEditApi.ApiGroup
+ oldRoleApi.ApiMethod = toEditApi.ApiMethod
+ oldRoleApi.ApiPath = toEditApi.ApiPath
+ if err = tx.Where("api_group = ? and api_method = ? and api_path = ?", oldApi.ApiGroup, oldApi.ApiMethod, oldApi.ApiPath).
+ Updates(&oldRoleApi).Error; err != nil {
+ return err
+ }
+ }
+ return nil
+ })
}
func (s *ServiceApi) AddApi(toAddApi model.SysApi) (err error) {
@@ -50,8 +74,16 @@ func (s *ServiceApi) DeleteApiById(id uint) (err error) {
if sysApi.Stable == "yesNo_yes" {
return errors.New(utils.GqaI18n("StableCantDo"))
}
- err = global.GqaDb.Where("id = ?", id).Unscoped().Delete(&sysApi).Error
- return err
+ return global.GqaDb.Transaction(func(tx *gorm.DB) error {
+ if err = tx.Where("id = ?", id).Unscoped().Delete(&sysApi).Error; err != nil {
+ return err
+ }
+ if err = tx.Where("api_group = ? and api_method = ? and api_path = ?", sysApi.ApiGroup, sysApi.ApiMethod, sysApi.ApiPath).
+ Delete(&model.SysRoleApi{}).Error; err != nil {
+ return err
+ }
+ return nil
+ })
}
func (s *ServiceApi) QueryApiById(id uint) (err error, apiInfo model.SysApi) {
diff --git a/GQA-BACKEND/service/private/dept.go b/GQA-BACKEND/service/private/dept.go
index 85fadc8..33d748d 100644
--- a/GQA-BACKEND/service/private/dept.go
+++ b/GQA-BACKEND/service/private/dept.go
@@ -48,10 +48,6 @@ func (s *ServiceDept) EditDept(toEditDept model.SysDept) (err error) {
if err = global.GqaDb.Where("id = ?", toEditDept.Id).First(&sysDept).Error; err != nil {
return err
}
- if sysDept.Stable == "yesNo_yes" {
- return errors.New(utils.GqaI18n("StableCantDo") + toEditDept.DeptCode)
- }
- //err = global.GqaDb.Updates(&toEditDept).Error
err = global.GqaDb.Save(&toEditDept).Error
return err
}
@@ -66,24 +62,26 @@ func (s *ServiceDept) AddDept(toAddDept model.SysDept) (err error) {
}
func (s *ServiceDept) DeleteDeptById(id uint) (err error) {
- var sysDept model.SysDept
- if err = global.GqaDb.Where("id = ?", id).First(&sysDept).Error; err != nil {
- return err
- }
- if sysDept.Stable == "yesNo_yes" {
- return errors.New(utils.GqaI18n("StableCantDo") + sysDept.DeptCode)
- }
- if err = global.GqaDb.Where("id = ?", id).Unscoped().Delete(&sysDept).Error; err != nil {
+ return global.GqaDb.Transaction(func(tx *gorm.DB) error {
+ var sysDept model.SysDept
+ if err = tx.Where("id = ?", id).First(&sysDept).Error; err != nil {
+ return err
+ }
+ if err = tx.Where("id = ?", id).Unscoped().Delete(&sysDept).Error; err != nil {
+ return err
+ }
+ var sysDeptUser model.SysDeptUser
+ err = tx.Where("sys_dept_dept_code = ?", sysDept.DeptCode).Delete(&sysDeptUser).Error
return err
- }
- var sysDeptUser model.SysDeptUser
- err = global.GqaDb.Where("sys_dept_dept_code = ?", sysDept.DeptCode).Delete(&sysDeptUser).Error
- return err
+ })
}
func (s *ServiceDept) QueryDeptById(id uint) (err error, deptInfo model.SysDept) {
var dept model.SysDept
- err = global.GqaDb.Preload("LeaderUser").Preload("CreatedByUser").Preload("UpdatedByUser").First(&dept, "id = ?", id).Error
+ err = global.GqaDb.Preload("LeaderUser").
+ Preload("CreatedByUser").
+ Preload("UpdatedByUser").
+ First(&dept, "id = ?", id).Error
return err, dept
}
@@ -98,7 +96,9 @@ func (s *ServiceDept) QueryUserByDept(deptCode *model.RequestDeptCode) (err erro
func (s *ServiceDept) RemoveDeptUser(toDeleteDeptUser *model.RequestDeptUser) (err error) {
var deptUser model.SysDeptUser
- err = global.GqaDb.Where("sys_dept_dept_code = ? and sys_user_username = ?", toDeleteDeptUser.DeptCode, toDeleteDeptUser.Username).Delete(&deptUser).Error
+ err = global.GqaDb.
+ Where("sys_dept_dept_code = ? and sys_user_username = ?", toDeleteDeptUser.DeptCode, toDeleteDeptUser.Username).
+ Delete(&deptUser).Error
return err
}
diff --git a/GQA-BACKEND/service/private/menu.go b/GQA-BACKEND/service/private/menu.go
index fdfba20..e30175d 100644
--- a/GQA-BACKEND/service/private/menu.go
+++ b/GQA-BACKEND/service/private/menu.go
@@ -5,6 +5,7 @@ import (
"github.com/Junvary/gin-quasar-admin/GQA-BACKEND/global"
"github.com/Junvary/gin-quasar-admin/GQA-BACKEND/model"
"github.com/Junvary/gin-quasar-admin/GQA-BACKEND/utils"
+ "gorm.io/gorm"
)
type ServiceMenu struct{}
@@ -50,13 +51,15 @@ func (s *ServiceMenu) EditMenu(toEditMenu model.SysMenu) (err error) {
if sysMenu.Stable == "yesNo_yes" {
return errors.New(utils.GqaI18n("StableCantDo") + toEditMenu.Title)
}
- //先删除关联button表中menu_name的记录
- var menuButton model.SysButton
- if err = global.GqaDb.Where("menu_name = ?", toEditMenu.Name).Delete(&menuButton).Error; err != nil {
+ return global.GqaDb.Transaction(func(tx *gorm.DB) error {
+ //先删除关联button表中menu_name的记录
+ var menuButton model.SysButton
+ if err = tx.Where("menu_name = ?", toEditMenu.Name).Delete(&menuButton).Error; err != nil {
+ return err
+ }
+ err = tx.Save(&toEditMenu).Error
return err
- }
- err = global.GqaDb.Save(&toEditMenu).Error
- return err
+ })
}
func (s *ServiceMenu) AddMenu(toAddMenu model.SysMenu) (err error) {
@@ -72,8 +75,18 @@ func (s *ServiceMenu) DeleteMenuById(id uint) (err error) {
if sysMenu.Stable == "yesNo_yes" {
return errors.New(utils.GqaI18n("StableCantDo") + sysMenu.Title)
}
- err = global.GqaDb.Where("id = ?", id).Unscoped().Delete(&sysMenu).Error
- return err
+ return global.GqaDb.Transaction(func(tx *gorm.DB) error {
+ if err = tx.Where("id = ?", id).Unscoped().Delete(&sysMenu).Error; err != nil {
+ return err
+ }
+ if err = tx.Where("sys_menu_name = ?", sysMenu.Name).Delete(&model.SysRoleMenu{}).Error; err != nil {
+ return err
+ }
+ if err = tx.Where("menu_name = ?", sysMenu.Name).Delete(&model.SysButton{}).Error; err != nil {
+ return err
+ }
+ return nil
+ })
}
func (s *ServiceMenu) QueryMenuById(id uint) (err error, menuInfo model.SysMenu) {
diff --git a/GQA-BACKEND/service/private/role.go b/GQA-BACKEND/service/private/role.go
index 4abe3d5..10a7672 100644
--- a/GQA-BACKEND/service/private/role.go
+++ b/GQA-BACKEND/service/private/role.go
@@ -37,7 +37,11 @@ func (s *ServiceRole) EditRole(toEditRole model.SysRole) (err error) {
return err
}
if sysRole.Stable == "yesNo_yes" {
- return errors.New(utils.GqaI18n("StableCantDo") + toEditRole.RoleCode)
+ return errors.New(utils.GqaI18n("StableCantDo") + sysRole.RoleCode)
+ }
+ //不允许改变RoleCode
+ if sysRole.RoleCode != toEditRole.RoleCode {
+ return errors.New(utils.GqaI18n("EditFailed") + sysRole.RoleCode)
}
//err = global.GqaDb.Updates(&toEditRole).Error
err = global.GqaDb.Save(&toEditRole).Error
@@ -61,25 +65,30 @@ func (s *ServiceRole) DeleteRoleById(id uint) (err error) {
if sysRole.Stable == "yesNo_yes" {
return errors.New(utils.GqaI18n("StableCantDo") + sysRole.RoleCode)
}
- roleCode := sysRole.RoleCode
- // 删除 sys_role_api 表的权限
- err = global.GqaDb.Where("role_code = ?", roleCode).Delete(model.SysRoleApi{}).Error
- // 删除 sys_role 表的数据
- err = global.GqaDb.Unscoped().Delete(&sysRole).Error
- if err != nil {
- return err
- }
- // 删除 sys_user_role 表的对应关系
- err = global.GqaDb.Where("sys_role_role_code = ?", roleCode).Delete(&model.SysUserRole{}).Error
- if err != nil {
- return err
- }
- // 删除 sys_role_menu 表的对应关系
- err = global.GqaDb.Where("sys_role_role_code = ?", roleCode).Delete(&model.SysRoleMenu{}).Error
- if err != nil {
- return err
- }
- return err
+ return global.GqaDb.Transaction(func(tx *gorm.DB) error {
+ roleCode := sysRole.RoleCode
+ // 删除 sys_role 表的数据
+ if err = tx.Unscoped().Delete(&sysRole).Error; err != nil {
+ return err
+ }
+ // 删除 sys_role_api 表的权限
+ if err = tx.Where("role_code = ?", roleCode).Delete(model.SysRoleApi{}).Error; err != nil {
+ return err
+ }
+ // 删除 sys_user_role 表的对应关系
+ if err = tx.Where("sys_role_role_code = ?", roleCode).Delete(&model.SysUserRole{}).Error; err != nil {
+ return err
+ }
+ // 删除 sys_role_menu 表的对应关系
+ if err = tx.Where("sys_role_role_code = ?", roleCode).Delete(&model.SysRoleMenu{}).Error; err != nil {
+ return err
+ }
+ // 删除sys_role_button 表的对应关系
+ if err = tx.Where("sys_role_role_code = ?", roleCode).Delete(&model.SysRoleButton{}).Error; err != nil {
+ return err
+ }
+ return nil
+ })
}
func (s *ServiceRole) QueryRoleById(id uint) (err error, roleInfo model.SysRole) {
@@ -95,29 +104,31 @@ func (s *ServiceRole) GetRoleMenuList(roleCode *model.RequestRoleCode) (err erro
}
func (s *ServiceRole) EditRoleMenu(toEditRoleMenu *model.RequestRoleMenuEdit) (err error) {
- err = global.GqaDb.Where("sys_role_role_code=?", toEditRoleMenu.RoleCode).Delete(&model.SysRoleMenu{}).Error
- if err != nil {
- return err
- }
- err = global.GqaDb.Where("sys_role_role_code=?", toEditRoleMenu.RoleCode).Delete(&model.SysRoleButton{}).Error
- if err != nil {
- return err
- }
- if len(toEditRoleMenu.RoleMenu) != 0 {
- err = global.GqaDb.Model(&model.SysRoleMenu{}).Create(&toEditRoleMenu.RoleMenu).Error
- if err != nil {
+ return global.GqaDb.Transaction(func(tx *gorm.DB) error {
+ if err = tx.Where("sys_role_role_code=?", toEditRoleMenu.RoleCode).Delete(&model.SysRoleMenu{}).Error; err != nil {
return err
}
- }
- if len(toEditRoleMenu.RoleButton) != 0 {
- err = global.GqaDb.Model(&model.SysRoleButton{}).Create(&toEditRoleMenu.RoleButton).Error
- if err != nil {
+ if err = tx.Where("sys_role_role_code=?", toEditRoleMenu.RoleCode).Delete(&model.SysRoleButton{}).Error; err != nil {
return err
}
- }
- defaultPage := toEditRoleMenu.DefaultPage
- err = global.GqaDb.Model(&model.SysRole{}).Where("role_code = ?", toEditRoleMenu.RoleCode).Update("default_page", defaultPage).Error
- return nil
+ if len(toEditRoleMenu.RoleMenu) != 0 {
+ err = tx.Model(&model.SysRoleMenu{}).Create(&toEditRoleMenu.RoleMenu).Error
+ if err != nil {
+ return err
+ }
+ }
+ if len(toEditRoleMenu.RoleButton) != 0 {
+ err = tx.Model(&model.SysRoleButton{}).Create(&toEditRoleMenu.RoleButton).Error
+ if err != nil {
+ return err
+ }
+ }
+ defaultPage := toEditRoleMenu.DefaultPage
+ err = tx.Model(&model.SysRole{}).
+ Where("role_code = ?", toEditRoleMenu.RoleCode).
+ Update("default_page", defaultPage).Error
+ return err
+ })
}
func (s *ServiceRole) GetRoleApiList(roleCode *model.RequestRoleCode) (err error, api []model.SysRoleApi) {
@@ -127,13 +138,16 @@ func (s *ServiceRole) GetRoleApiList(roleCode *model.RequestRoleCode) (err error
}
func (s *ServiceRole) EditRoleApi(toEditRoleApi *model.RequestEditRoleApi) (err error) {
- err = global.GqaDb.Where("role_code = ?", toEditRoleApi.RoleCode).Delete(&model.SysRoleApi{}).Error
-
- if len(toEditRoleApi.RoleApi) != 0 {
- err = global.GqaDb.Model(&model.SysRoleApi{}).Create(&toEditRoleApi.RoleApi).Error
- return err
- }
- return nil
+ return global.GqaDb.Transaction(func(tx *gorm.DB) error {
+ if err = tx.Where("role_code = ?", toEditRoleApi.RoleCode).Delete(&model.SysRoleApi{}).Error; err != nil {
+ return err
+ }
+ if len(toEditRoleApi.RoleApi) != 0 {
+ err = tx.Model(&model.SysRoleApi{}).Create(&toEditRoleApi.RoleApi).Error
+ return err
+ }
+ return nil
+ })
}
func (s *ServiceRole) QueryUserByRole(roleCode *model.RequestRoleCode) (err error, user []model.SysUser) {
@@ -150,7 +164,9 @@ func (s *ServiceRole) RemoveRoleUser(toRemoveRoleUser *model.RequestRoleUser) (e
if toRemoveRoleUser.Username == "admin" && toRemoveRoleUser.RoleCode == "super-admin" {
return errors.New(utils.GqaI18n("CantRemoveAdminFromAdmin"))
}
- err = global.GqaDb.Where("sys_role_role_code = ? and sys_user_username = ?", toRemoveRoleUser.RoleCode, toRemoveRoleUser.Username).Delete(&roleUser).Error
+ err = global.GqaDb.
+ Where("sys_role_role_code = ? and sys_user_username = ?", toRemoveRoleUser.RoleCode, toRemoveRoleUser.Username).
+ Delete(&roleUser).Error
return err
}
diff --git a/GQA-BACKEND/service/private/user.go b/GQA-BACKEND/service/private/user.go
index 581e45f..23f95a0 100644
--- a/GQA-BACKEND/service/private/user.go
+++ b/GQA-BACKEND/service/private/user.go
@@ -48,14 +48,18 @@ func (s *ServiceUser) EditUser(toEditUser model.SysUser) (err error) {
if sysUser.Stable == "yesNo_yes" {
return errors.New(utils.GqaI18n("StableCantDo") + toEditUser.Username)
}
- global.GqaDb.Where("sys_user_username = ?", toEditUser.Username).Delete(&model.SysDeptUser{})
- if err = global.GqaDb.Where("id = ?", toEditUser.Id).First(&sysUser).Error; err != nil {
+ return global.GqaDb.Transaction(func(tx *gorm.DB) error {
+ if err = tx.Where("sys_user_username = ?", toEditUser.Username).Delete(&model.SysDeptUser{}).Error; err != nil {
+ return err
+ }
+ if err = tx.Where("id = ?", toEditUser.Id).First(&sysUser).Error; err != nil {
+ return err
+ }
+ toEditUser.Password = sysUser.Password
+ //err = global.GqaDb.Updates(&toEditUser).Error
+ err = tx.Save(&toEditUser).Error
return err
- }
- toEditUser.Password = sysUser.Password
- //err = global.GqaDb.Updates(&toEditUser).Error
- err = global.GqaDb.Save(&toEditUser).Error
- return err
+ })
}
func (s *ServiceUser) AddUser(toAddUser *model.SysUser) (err error) {
@@ -83,16 +87,18 @@ func (s *ServiceUser) DeleteUserById(id uint) (err error) {
if sysUser.Stable == "yesNo_yes" {
return errors.New(utils.GqaI18n("StableCantDo") + sysUser.Username)
}
- if err = global.GqaDb.Where("id = ?", id).Unscoped().Delete(&sysUser).Error; err != nil {
- return err
- }
- var sysDeptUser model.SysDeptUser
- if err = global.GqaDb.Where("sys_user_username = ?", sysUser.Username).Delete(&sysDeptUser).Error; err != nil {
+ return global.GqaDb.Transaction(func(tx *gorm.DB) error {
+ if err = tx.Where("id = ?", id).Unscoped().Delete(&sysUser).Error; err != nil {
+ return err
+ }
+ var sysDeptUser model.SysDeptUser
+ if err = tx.Where("sys_user_username = ?", sysUser.Username).Delete(&sysDeptUser).Error; err != nil {
+ return err
+ }
+ var sysUserRole model.SysUserRole
+ err = tx.Where("sys_user_username = ?", sysUser.Username).Delete(&sysUserRole).Error
return err
- }
- var sysUserRole model.SysUserRole
- err = global.GqaDb.Where("sys_user_username = ?", sysUser.Username).Delete(&sysUserRole).Error
- return err
+ })
}
func (s *ServiceUser) GetUserByUsername(username string) (err error, userInfo model.SysUser) {
diff --git a/GQA-FRONTEND/src/config/config.js b/GQA-FRONTEND/src/config/config.js
index 0df0340..74f1f83 100644
--- a/GQA-FRONTEND/src/config/config.js
+++ b/GQA-FRONTEND/src/config/config.js
@@ -1,13 +1,6 @@
-export const DemoMode = false
-export const AllowList = [
- '/login',
- '/new-tab/add-ywd'
-]
-export const GqaConsoleLogo = () => {
- console.info('Welcome to Gin-Quasar-Admin!')
- console.info('Github: https://github.com/Junvary/gin-quasar-admin ')
- console.info('Expecting Your Star!')
-}
+// 演示模式开关
+export const DemoMode = true
+// 演示模式禁止的API
export const ForbiddenUrl = [
'user/edit-user',
'user/delete-user-by-id',
@@ -40,4 +33,15 @@ export const ForbiddenUrl = [
'user-online/kick-online-user',
'cron/start-cron',
'cron/stop-cron'
-]
\ No newline at end of file
+]
+// 路由白名单
+export const AllowList = [
+ '/login',
+ '/new-tab/add-ywd'
+]
+// 控制台打印内容
+export const GqaConsoleLogo = () => {
+ console.info('Welcome to Gin-Quasar-Admin!')
+ console.info('Github: https://github.com/Junvary/gin-quasar-admin ')
+ console.info('Expecting Your Star!')
+}
diff --git a/GQA-FRONTEND/src/pages/System/Role/modules/recordDetail.vue b/GQA-FRONTEND/src/pages/System/Role/modules/recordDetail.vue
index 69f8eae..bfe6019 100644
--- a/GQA-FRONTEND/src/pages/System/Role/modules/recordDetail.vue
+++ b/GQA-FRONTEND/src/pages/System/Role/modules/recordDetail.vue
@@ -13,11 +13,10 @@
+ :label="($t('Role') + $t('Name'))" :rules="[val => val && val.length > 0 || $t('NeetInput')]" />