1
0
mirror of https://github.com/FatttSnake/Pinnacle-OA.git synced 2026-04-04 22:41:24 +08:00

Added enable status to Role, Group and User

This commit is contained in:
2023-05-22 02:04:36 +08:00
parent b9dc1813ba
commit 9a7702efe6
14 changed files with 103 additions and 10 deletions

View File

@@ -45,6 +45,12 @@ public class Group implements Serializable {
@TableField("name") @TableField("name")
private String name; private String name;
/**
* 启用
*/
@TableField("enable")
private Integer enable;
@TableField("deleted") @TableField("deleted")
@TableLogic @TableLogic
private Long deleted; private Long deleted;

View File

@@ -49,6 +49,12 @@ public class Role implements Serializable {
@TableField("name") @TableField("name")
private String name; private String name;
/**
* 启用
*/
@TableField("enable")
private Integer enable;
@TableField(exist = false) @TableField(exist = false)
private List<Menu> menus; private List<Menu> menus;

View File

@@ -25,6 +25,7 @@ public class ResponseCode {
public static final int UNAUTHORIZED = 30010; public static final int UNAUTHORIZED = 30010;
public static final int ACCESS_DENIED = 30030; public static final int ACCESS_DENIED = 30030;
public static final int USER_DISABLE = 30031;
public static final int SYSTEM_ERROR = 50001; public static final int SYSTEM_ERROR = 50001;
public static final int SYSTEM_TIMEOUT = 50002; public static final int SYSTEM_TIMEOUT = 50002;

View File

@@ -6,6 +6,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.dao.DuplicateKeyException; import org.springframework.dao.DuplicateKeyException;
import org.springframework.security.access.AccessDeniedException; import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.DisabledException;
import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.bind.annotation.RestControllerAdvice;
@@ -14,7 +15,7 @@ import org.springframework.web.bind.annotation.RestControllerAdvice;
public class CustomExceptionHandler { public class CustomExceptionHandler {
@ExceptionHandler(value = Exception.class) @ExceptionHandler(value = Exception.class)
public ResponseResult exceptionHandler(Exception e) { public ResponseResult<?> exceptionHandler(Exception e) {
if (e instanceof DuplicateKeyException) { if (e instanceof DuplicateKeyException) {
return ResponseResult.build(ResponseCode.DATABASE_SAVE_ERROR, "无法添加重复数据", null); return ResponseResult.build(ResponseCode.DATABASE_SAVE_ERROR, "无法添加重复数据", null);
} }
@@ -24,6 +25,9 @@ public class CustomExceptionHandler {
if (e instanceof AccessDeniedException) { if (e instanceof AccessDeniedException) {
return ResponseResult.build(ResponseCode.ACCESS_DENIED, e.getMessage(), null); return ResponseResult.build(ResponseCode.ACCESS_DENIED, e.getMessage(), null);
} }
if (e instanceof DisabledException) {
return ResponseResult.build(ResponseCode.USER_DISABLE, e.getMessage(), null);
}
log.debug(e.getMessage(), e); log.debug(e.getMessage(), e);

View File

@@ -5,6 +5,7 @@
<select id="getAll" resultMap="groupMap"> <select id="getAll" resultMap="groupMap">
select t_group.id as group_id, select t_group.id as group_id,
t_group.name as group_name, t_group.name as group_name,
t_group.enable as group_enable,
t_group.deleted as group_deleted, t_group.deleted as group_deleted,
t_group.version as group_version, t_group.version as group_version,
tr.id as role_id, tr.id as role_id,
@@ -20,6 +21,7 @@
<select id="getOneById" resultMap="groupMap"> <select id="getOneById" resultMap="groupMap">
select t_group.id as group_id, select t_group.id as group_id,
t_group.name as group_name, t_group.name as group_name,
t_group.enable as group_enable,
t_group.deleted as group_deleted, t_group.deleted as group_deleted,
t_group.version as group_version, t_group.version as group_version,
tr.id as role_id, tr.id as role_id,
@@ -38,6 +40,7 @@
<resultMap id="groupMap" type="group"> <resultMap id="groupMap" type="group">
<id property="id" column="group_id"/> <id property="id" column="group_id"/>
<result property="name" column="group_name"/> <result property="name" column="group_name"/>
<result property="enable" column="group_enable"/>
<result property="deleted" column="group_deleted"/> <result property="deleted" column="group_deleted"/>
<result property="version" column="group_version"/> <result property="version" column="group_version"/>
<collection property="roles" ofType="role"> <collection property="roles" ofType="role">

View File

@@ -5,6 +5,7 @@
<select id="getAll" resultMap="roleMap"> <select id="getAll" resultMap="roleMap">
select t_role.id as role_id, select t_role.id as role_id,
t_role.name as role_name, t_role.name as role_name,
t_role.enable as role_enable,
t_role.deleted as role_deleted, t_role.deleted as role_deleted,
t_role.version as role_version, t_role.version as role_version,
tm.id as menu_id, tm.id as menu_id,
@@ -33,6 +34,7 @@
<select id="getOneById" resultMap="roleMap"> <select id="getOneById" resultMap="roleMap">
select t_role.id as role_id, select t_role.id as role_id,
t_role.name as role_name, t_role.name as role_name,
t_role.enable as role_enable,
t_role.deleted as role_deleted, t_role.deleted as role_deleted,
t_role.version as role_version, t_role.version as role_version,
tm.id as menu_id, tm.id as menu_id,
@@ -63,6 +65,7 @@
<resultMap id="roleMap" type="role"> <resultMap id="roleMap" type="role">
<id property="id" column="role_id"/> <id property="id" column="role_id"/>
<result property="name" column="role_name"/> <result property="name" column="role_name"/>
<result property="enable" column="role_enable"/>
<result property="deleted" column="role_deleted"/> <result property="deleted" column="role_deleted"/>
<result property="version" column="role_version"/> <result property="version" column="role_version"/>
<collection property="menus" ofType="menu"> <collection property="menus" ofType="menu">

View File

@@ -15,11 +15,13 @@
ts.deleted as staff_deleted, ts.deleted as staff_deleted,
ts.version as staff_version, ts.version as staff_version,
tr.id as role_id, tr.id as role_id,
tr.enable as role_enable,
tr.name as role_name, tr.name as role_name,
tr.deleted as role_deleted, tr.deleted as role_deleted,
tr.version as role_version, tr.version as role_version,
tg.id as group_id, tg.id as group_id,
tg.name as group_name, tg.name as group_name,
tg.enable as group_enable,
tg.deleted as group_deleted, tg.deleted as group_deleted,
tg.version as group_version tg.version as group_version
from t_user from t_user
@@ -44,10 +46,12 @@
ts.version as staff_version, ts.version as staff_version,
tr.id as role_id, tr.id as role_id,
tr.name as role_name, tr.name as role_name,
tr.enable as role_enable,
tr.deleted as role_deleted, tr.deleted as role_deleted,
tr.version as role_version, tr.version as role_version,
tg.id as group_id, tg.id as group_id,
tg.name as group_name, tg.name as group_name,
tg.enable as group_enable,
tg.deleted as group_deleted, tg.deleted as group_deleted,
tg.version as group_version tg.version as group_version
from t_user from t_user
@@ -90,10 +94,10 @@
from t_user from t_user
left join (select * from t_staff where deleted = 0) as ts on ts.user_id = t_user.id left join (select * from t_staff where deleted = 0) as ts on ts.user_id = t_user.id
left join (select * from t_user_group where deleted = 0) as tug on t_user.id = tug.user_id left join (select * from t_user_group where deleted = 0) as tug on t_user.id = tug.user_id
left join (select * from t_group where deleted = 0) as tg on tg.id = tug.group_id left join (select * from t_group where deleted = 0 and enable = 1) as tg on tg.id = tug.group_id
left join (select * from t_role_group where deleted = 0) as trg on tg.id = trg.group_id left join (select * from t_role_group where deleted = 0) as trg on tg.id = trg.group_id
left join (select * from t_user_role where deleted = 0) as tur on t_user.id = tur.user_id left join (select * from t_user_role where deleted = 0) as tur on t_user.id = tur.user_id
left join (select * from t_role where deleted = 0) as tr on tr.id = trg.role_id or tr.id = tur.role_id left join (select * from t_role where deleted = 0 and enable = 1) as tr on tr.id = trg.role_id or tr.id = tur.role_id
left join (select * from t_power_role where deleted = 0) as tpr on tpr.role_id = tr.id left join (select * from t_power_role where deleted = 0) as tpr on tpr.role_id = tr.id
left join t_power as tp on tp.id = tpr.power_id left join t_power as tp on tp.id = tpr.power_id
left join t_menu tm on tp.id = tm.power_id left join t_menu tm on tp.id = tm.power_id
@@ -120,12 +124,14 @@
<collection property="roles" ofType="role"> <collection property="roles" ofType="role">
<id property="id" column="role_id"/> <id property="id" column="role_id"/>
<result property="name" column="role_name"/> <result property="name" column="role_name"/>
<result property="enable" column="role_enable"/>
<result property="deleted" column="role_deleted"/> <result property="deleted" column="role_deleted"/>
<result property="version" column="role_version"/> <result property="version" column="role_version"/>
</collection> </collection>
<collection property="groups" ofType="group"> <collection property="groups" ofType="group">
<id property="id" column="group_id"/> <id property="id" column="group_id"/>
<result property="name" column="group_name"/> <result property="name" column="group_name"/>
<result property="enable" column="group_enable"/>
<result property="deleted" column="group_deleted"/> <result property="deleted" column="group_deleted"/>
<result property="version" column="group_version"/> <result property="version" column="group_version"/>
</collection> </collection>

View File

@@ -105,6 +105,7 @@ create table `t_group`
( (
`id` bigint not null primary key, `id` bigint not null primary key,
`name` varchar(30) not null comment '用户组名', `name` varchar(30) not null comment '用户组名',
`enable` int not null comment '启用',
`deleted` bigint not null default 0, `deleted` bigint not null default 0,
`version` int not null default 0, `version` int not null default 0,
constraint t_group_unique unique (name, deleted) constraint t_group_unique unique (name, deleted)
@@ -125,6 +126,7 @@ create table `t_role`
( (
`id` bigint not null primary key, `id` bigint not null primary key,
`name` varchar(20) not null comment '角色名', `name` varchar(20) not null comment '角色名',
`enable` int not null comment '启用',
`deleted` bigint not null default 0, `deleted` bigint not null default 0,
`version` int not null default 0, `version` int not null default 0,
constraint t_role_unique unique (name, deleted) constraint t_role_unique unique (name, deleted)

View File

@@ -31,6 +31,12 @@
}}</el-tag> }}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="状态" align="center">
<template #default="scope">
<el-tag type="success" v-if="scope.row.enable">启用</el-tag>
<el-tag type="info" v-else>禁用</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="150" align="center"> <el-table-column label="操作" width="150" align="center">
<template #default="scope"> <template #default="scope">
<el-button size="small" @click="$emit('onEdit', scope.$index, scope.row)" <el-button size="small" @click="$emit('onEdit', scope.$index, scope.row)"

View File

@@ -31,6 +31,7 @@ const DATABASE_CONNECT_ERROR = 20036
const UNAUTHORIZED = 30010 const UNAUTHORIZED = 30010
const ACCESS_DENIED = 30030 const ACCESS_DENIED = 30030
const USER_DISABLE = 30031
const SYSTEM_ERROR = 50001 const SYSTEM_ERROR = 50001
const SYSTEM_TIMEOUT = 50002 const SYSTEM_TIMEOUT = 50002
@@ -66,6 +67,7 @@ export {
DATABASE_CONNECT_ERROR, DATABASE_CONNECT_ERROR,
UNAUTHORIZED, UNAUTHORIZED,
ACCESS_DENIED, ACCESS_DENIED,
USER_DISABLE,
SYSTEM_ERROR, SYSTEM_ERROR,
SYSTEM_TIMEOUT SYSTEM_TIMEOUT
} }

View File

@@ -84,7 +84,12 @@
import { getCaptchaSrc, login, verifyCaptcha } from '@/utils/auth' import { getCaptchaSrc, login, verifyCaptcha } from '@/utils/auth'
import backShape from '@/assets/svg/back-shape.svg' import backShape from '@/assets/svg/back-shape.svg'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import { LOGIN_SUCCESS, LOGOUT_FAILED, PRODUCTION_NAME } from '@/constants/Common.constants' import {
LOGIN_SUCCESS,
LOGOUT_FAILED,
PRODUCTION_NAME,
USER_DISABLE
} from '@/constants/Common.constants'
import { setToken } from '@/utils/common' import { setToken } from '@/utils/common'
export default { export default {
@@ -169,6 +174,13 @@ export default {
}) })
this.resetLogin() this.resetLogin()
break break
case USER_DISABLE:
ElMessage.error({
dangerouslyUseHTMLString: true,
message: '<strong>该用户已被禁用</strong>,请联系管理员'
})
this.resetLogin()
break
default: default:
ElMessage.error({ ElMessage.error({
dangerouslyUseHTMLString: true, dangerouslyUseHTMLString: true,

View File

@@ -49,6 +49,16 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="状态">
<el-switch
v-model="groupForm.enable"
inline-prompt
active-text="启用"
:active-value="1"
inactive-text="禁用"
:inactive-value="0"
/>
</el-form-item>
</el-form> </el-form>
</template> </template>
<template #footer> <template #footer>
@@ -81,7 +91,8 @@ export default {
roles: [], roles: [],
groupForm: { groupForm: {
inputGroupName: '', inputGroupName: '',
selectedRoles: [] selectedRoles: [],
enable: 0
}, },
isAddNew: true, isAddNew: true,
dialogTitle: '', dialogTitle: '',
@@ -130,6 +141,7 @@ export default {
if (this.isAddNew) { if (this.isAddNew) {
this.groupForm.inputGroupName = '' this.groupForm.inputGroupName = ''
this.groupForm.selectedRoles = [] this.groupForm.selectedRoles = []
this.groupForm.enable = 0
this.dialogTitle = '添加用户组' this.dialogTitle = '添加用户组'
} else { } else {
this.dialogTitle = '编辑用户组' this.dialogTitle = '编辑用户组'
@@ -157,6 +169,7 @@ export default {
for (const role of row.roles) { for (const role of row.roles) {
this.groupForm.selectedRoles.push(role.id) this.groupForm.selectedRoles.push(role.id)
} }
this.groupForm.enable = row.enable
this.isAddNew = false this.isAddNew = false
this.dialogVisible = true this.dialogVisible = true
}, },
@@ -193,7 +206,8 @@ export default {
const groupObject = { const groupObject = {
id: '', id: '',
name: this.groupForm.inputGroupName, name: this.groupForm.inputGroupName,
roles: [] roles: [],
enable: this.groupForm.enable
} }
for (const roleId of this.groupForm.selectedRoles) { for (const roleId of this.groupForm.selectedRoles) {
const role = { const role = {

View File

@@ -51,6 +51,16 @@
@check-change="handleSelectedPowerChange" @check-change="handleSelectedPowerChange"
/> />
</el-form-item> </el-form-item>
<el-form-item label="状态">
<el-switch
v-model="roleForm.enable"
inline-prompt
active-text="启用"
:active-value="1"
inactive-text="禁用"
:inactive-value="0"
/>
</el-form-item>
</el-form> </el-form>
</template> </template>
<template #footer> <template #footer>
@@ -88,7 +98,8 @@ export default {
}, },
roleForm: { roleForm: {
inputRoleName: '', inputRoleName: '',
selectedPower: new Set() selectedPower: new Set(),
enable: 0
}, },
isAddNew: true, isAddNew: true,
defaultSelectedPower: [], defaultSelectedPower: [],
@@ -156,6 +167,7 @@ export default {
this.defaultSelectedPower = [] this.defaultSelectedPower = []
this.roleForm.inputRoleName = '' this.roleForm.inputRoleName = ''
this.roleForm.selectedPower.clear() this.roleForm.selectedPower.clear()
this.roleForm.enable = 0
this.dialogTitle = '添加角色' this.dialogTitle = '添加角色'
} else { } else {
this.dialogTitle = '编辑角色' this.dialogTitle = '编辑角色'
@@ -209,6 +221,7 @@ export default {
this.roleForm.inputRoleName = row.name this.roleForm.inputRoleName = row.name
this.editRoleId = row.id this.editRoleId = row.id
this.roleForm.selectedPower.clear() this.roleForm.selectedPower.clear()
this.roleForm.enable = row.enable
this.defaultSelectedPower = [] this.defaultSelectedPower = []
for (const operation of row.operations) { for (const operation of row.operations) {
this.defaultSelectedPower.push(operation.powerId) this.defaultSelectedPower.push(operation.powerId)
@@ -256,7 +269,8 @@ export default {
const roleObject = { const roleObject = {
id: '', id: '',
name: this.roleForm.inputRoleName, name: this.roleForm.inputRoleName,
powers: [] powers: [],
enable: this.roleForm.enable
} }
for (const powerId of this.roleForm.selectedPower) { for (const powerId of this.roleForm.selectedPower) {
const power = { const power = {

View File

@@ -82,6 +82,16 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="状态">
<el-switch
v-model="userForm.enable"
inline-prompt
active-text="启用"
:active-value="1"
inactive-text="禁用"
:inactive-value="0"
/>
</el-form-item>
</el-form> </el-form>
</template> </template>
<template #footer> <template #footer>
@@ -124,7 +134,8 @@ export default {
inputUsername: '', inputUsername: '',
inputPassword: '', inputPassword: '',
selectedRoles: [], selectedRoles: [],
selectedGroups: [] selectedGroups: [],
enable: 0
}, },
isAddNew: true, isAddNew: true,
dialogTitle: '', dialogTitle: '',
@@ -230,6 +241,7 @@ export default {
this.userForm.selectedGroups.push(group.id) this.userForm.selectedGroups.push(group.id)
} }
} }
this.userForm.enable = row.enable
this.isAddNew = false this.isAddNew = false
this.dialogVisible = true this.dialogVisible = true
}, },
@@ -270,6 +282,7 @@ export default {
this.userForm.inputPassword = '' this.userForm.inputPassword = ''
this.userForm.selectedRoles = [] this.userForm.selectedRoles = []
this.userForm.selectedGroups = [] this.userForm.selectedGroups = []
this.userForm.enable = 0
this.dialogTitle = '添加用户' this.dialogTitle = '添加用户'
} else { } else {
this.dialogTitle = '编辑用户' this.dialogTitle = '编辑用户'
@@ -288,7 +301,8 @@ export default {
username: this.userForm.inputUsername, username: this.userForm.inputUsername,
passwd: this.userForm.inputPassword, passwd: this.userForm.inputPassword,
roles: [], roles: [],
groups: [] groups: [],
enable: this.userForm.enable
} }
if (this.editUserId !== '1') { if (this.editUserId !== '1') {
for (const roleId of this.userForm.selectedRoles) { for (const roleId of this.userForm.selectedRoles) {