refactor: role setting

This commit is contained in:
wxg0103 2025-06-27 16:13:56 +08:00
parent 62cb3704cf
commit efa2335b8d
5 changed files with 48 additions and 31 deletions

View File

@ -38,7 +38,7 @@ const systemRouter = {
new ComplexPermission( new ComplexPermission(
[RoleConst.ADMIN, RoleConst.WORKSPACE_MANAGE.getWorkspaceRole], [RoleConst.ADMIN, RoleConst.WORKSPACE_MANAGE.getWorkspaceRole],
[PermissionConst.ROLE_READ, PermissionConst.WORKSPACE_ROLE_READ], [PermissionConst.ROLE_READ, PermissionConst.WORKSPACE_ROLE_READ],
[EditionConst.IS_EE], [EditionConst.IS_EE, EditionConst.IS_PE],
'OR', 'OR',
), ),
], ],

View File

@ -1,8 +1,8 @@
import { PermissionConst, EditionConst, RoleConst } from '@/utils/permission/data' import {PermissionConst, EditionConst, RoleConst} from '@/utils/permission/data'
import { hasPermission } from '@/utils/permission/index' import {hasPermission} from '@/utils/permission/index'
import roleSystemApi from '@/api/system/role' import roleSystemApi from '@/api/system/role'
import roleWorkspaceApi from '@/api/workspace/role' import roleWorkspaceApi from '@/api/workspace/role'
import { ComplexPermission } from '../permission/type' import {ComplexPermission} from '../permission/type'
// 系统管理员 API // 系统管理员 API
const systemApiMap = { const systemApiMap = {
@ -19,19 +19,20 @@ const workspaceApiMap = {
*/ */
export function loadPermissionApi(type: string) { export function loadPermissionApi(type: string) {
if (hasPermission(EditionConst.IS_EE, 'OR')) { if (hasPermission([EditionConst.IS_EE, EditionConst.IS_PE], 'OR')) {
if (hasPermission(new ComplexPermission ( if (hasPermission(new ComplexPermission(
[RoleConst.ADMIN], [RoleConst.ADMIN],
[PermissionConst.ROLE_READ], [PermissionConst.ROLE_READ],
[], [],
'OR'),'OR')) { 'OR'), 'OR')) {
// 加载系统管理员 API // 加载系统管理员 API
return systemApiMap[type] return systemApiMap[type]
} if (hasPermission(new ComplexPermission ( }
if (hasPermission(new ComplexPermission(
[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole], [RoleConst.WORKSPACE_MANAGE.getWorkspaceRole],
[PermissionConst.WORKSPACE_ROLE_READ.getWorkspacePermissionWorkspaceManageRole], [PermissionConst.WORKSPACE_ROLE_READ.getWorkspacePermissionWorkspaceManageRole],
[], [],
'OR'),'OR' )) { 'OR'), 'OR')) {
// 加载企业版工作空间管理员 API // 加载企业版工作空间管理员 API
return workspaceApiMap[type] return workspaceApiMap[type]
} }

View File

@ -21,17 +21,19 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { onBeforeMount, ref } from 'vue' import {onBeforeMount, ref} from 'vue'
import type { CreateMemberParamsItem, FormItemModel } from '@/api/type/role' import type {CreateMemberParamsItem, FormItemModel} from '@/api/type/role'
import UserApi from '@/api/user/user' import UserApi from '@/api/user/user'
import WorkspaceApi from '@/api/workspace/workspace' import WorkspaceApi from '@/api/workspace/workspace'
import MemberFormContent from './MemberFormContent.vue' import MemberFormContent from './MemberFormContent.vue'
import { t } from '@/locales' import {t} from '@/locales'
import type { RoleItem } from '@/api/type/role' import type {RoleItem} from '@/api/type/role'
import { MsgSuccess } from '@/utils/message' import {MsgSuccess} from '@/utils/message'
import { RoleTypeEnum } from '@/enums/system' import {RoleTypeEnum} from '@/enums/system'
import { loadPermissionApi } from '@/utils/dynamics-api/permission-api' import {loadPermissionApi} from '@/utils/dynamics-api/permission-api'
import useStore from "@/stores";
const {user} = useStore()
const props = defineProps<{ const props = defineProps<{
currentRole?: RoleItem currentRole?: RoleItem
}>() }>()
@ -108,16 +110,18 @@ async function getWorkspaceFormItem() {
function init() { function init() {
if (props.currentRole?.type !== RoleTypeEnum.ADMIN) { if (props.currentRole?.type !== RoleTypeEnum.ADMIN) {
formItemModel.value = [...userFormItem.value, ...workspaceFormItem.value] formItemModel.value = [...userFormItem.value, ...workspaceFormItem.value]
list.value = [{ user_ids: [], workspace_ids: [] }] list.value = [{user_ids: [], workspace_ids: []}]
} else { } else {
formItemModel.value = [...userFormItem.value] formItemModel.value = [...userFormItem.value]
list.value = [{ user_ids: [] }] list.value = [{user_ids: []}]
} }
} }
onBeforeMount(async () => { onBeforeMount(async () => {
await getUserFormItem() await getUserFormItem()
await getWorkspaceFormItem() if (user.isEE()) {
await getWorkspaceFormItem()
}
init() init()
}) })
@ -131,16 +135,19 @@ function handleCancel() {
} }
const memberFormContentRef = ref<InstanceType<typeof MemberFormContent>>() const memberFormContentRef = ref<InstanceType<typeof MemberFormContent>>()
function handleAdd() { function handleAdd() {
memberFormContentRef.value?.validate().then(async (valid: any) => { memberFormContentRef.value?.validate().then(async (valid: any) => {
if (valid) { if (valid) {
let params let params
if (props.currentRole?.type === RoleTypeEnum.ADMIN) { if (props.currentRole?.type === RoleTypeEnum.ADMIN) {
params = list.value.map((item) => ({ user_ids: item.user_ids, workspace_ids: ['None'] })) params = list.value.map((item) => ({user_ids: item.user_ids, workspace_ids: ['None']}))
} else if (user.isPE()) {
params = list.value.map((item) => ({user_ids: item.user_ids, workspace_ids: ['default']}))
} }
await loadPermissionApi('role').CreateMember( await loadPermissionApi('role').CreateMember(
props.currentRole?.id as string, props.currentRole?.id as string,
{ members: params ?? list.value }, {members: params ?? list.value},
loading, loading,
) )
MsgSuccess(t('common.addSuccess')) MsgSuccess(t('common.addSuccess'))
@ -150,5 +157,5 @@ function handleAdd() {
}) })
} }
defineExpose({ open }) defineExpose({open})
</script> </script>

View File

@ -53,11 +53,11 @@
<span>{{ userForm.password }}</span> <span>{{ userForm.password }}</span>
</el-form-item> </el-form-item>
</el-form> </el-form>
<h4 class="title-decoration-1 mb-16 mt-8" v-if="user.isEE()"> <h4 class="title-decoration-1 mb-16 mt-8" v-if="user.isEE() || user.isPE()">
{{ $t('views.userManage.roleSetting') }}</h4> {{ $t('views.userManage.roleSetting') }}</h4>
<MemberFormContent ref="memberFormContentRef" :models="formItemModel" v-model:form="list" <MemberFormContent ref="memberFormContentRef" :models="formItemModel" v-model:form="list"
v-loading="memberFormContentLoading" v-loading="memberFormContentLoading"
:addText="$t('views.userManage.addRole')" v-if="user.isEE()"/> :addText="$t('views.userManage.addRole')" v-if="user.isEE() || user.isPE()"/>
<template #footer> <template #footer>
<el-button @click.prevent="visible = false"> {{ $t('common.cancel') }}</el-button> <el-button @click.prevent="visible = false"> {{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="submit(userFormRef)" :loading="loading"> <el-button type="primary" @click="submit(userFormRef)" :loading="loading">
@ -152,9 +152,11 @@ async function getWorkspaceFormItem() {
} }
onBeforeMount(async () => { onBeforeMount(async () => {
if (user.isEE()) { if (user.isEE() || user.isPE()) {
await getRoleFormItem(); await getRoleFormItem();
await getWorkspaceFormItem(); if (user.isEE()) {
await getWorkspaceFormItem();
}
formItemModel.value = [...roleFormItem.value, ...workspaceFormItem.value] formItemModel.value = [...roleFormItem.value, ...workspaceFormItem.value]
} }
list.value = [{role_id: '', workspace_ids: []}] list.value = [{role_id: '', workspace_ids: []}]
@ -262,10 +264,17 @@ const submit = async (formEl: FormInstance | undefined) => {
if (memberFormContentRef.value) { if (memberFormContentRef.value) {
await memberFormContentRef.value?.validate() await memberFormContentRef.value?.validate()
} }
if (user.isPE()) {
list.value = list.value.map(item => ({
...item,
workspace_ids: adminRoleList.value.find(item1 => item1.id === item.role_id) ? ['None'] : ['default']
}))
}
const params = { const params = {
...userForm.value, ...userForm.value,
role_setting: list.value role_setting: list.value
} }
console.log(list.value)
if (isEdit.value) { if (isEdit.value) {
userManageApi.putUserManage(userForm.value.id, params, loading).then((res) => { userManageApi.putUserManage(userForm.value.id, params, loading).then((res) => {
emit('refresh') emit('refresh')

View File

@ -7,7 +7,7 @@
v-hasPermission="[ v-hasPermission="[
RoleConst.ADMIN, RoleConst.ADMIN,
PermissionConst.USER_CREATE PermissionConst.USER_CREATE
]" ]"
>{{ >{{
$t('views.userManage.createUser') $t('views.userManage.createUser')
}} }}
@ -92,7 +92,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="role" :label="$t('views.role.member.role')" min-width="100" <el-table-column prop="role" :label="$t('views.role.member.role')" min-width="100"
v-if="user.isEE()"> v-if="user.isEE() || user.isPE()">
<template #default="{ row }"> <template #default="{ row }">
<TagGroup :tags="row.role"/> <TagGroup :tags="row.role"/>
</template> </template>
@ -129,7 +129,7 @@
size="small" size="small"
v-model="row.is_active" v-model="row.is_active"
:before-change="() => changeState(row)" :before-change="() => changeState(row)"
v-if="hasPermission([RoleConst.ADMIN,PermissionConst.USER_EDIT],'OR')" v-if="hasPermission([RoleConst.ADMIN,PermissionConst.USER_EDIT],'OR')"
/> />
</span> </span>
<el-divider direction="vertical"/> <el-divider direction="vertical"/>
@ -146,7 +146,7 @@
text text
@click.stop="editPwdUser(row)" @click.stop="editPwdUser(row)"
:title="$t('views.userManage.setting.updatePwd')" :title="$t('views.userManage.setting.updatePwd')"
v-if="hasPermission([RoleConst.ADMIN,PermissionConst.USER_EDIT],'OR')" v-if="hasPermission([RoleConst.ADMIN,PermissionConst.USER_EDIT],'OR')"
> >
<el-icon><Lock/></el-icon> <el-icon><Lock/></el-icon>
</el-button> </el-button>
@ -158,7 +158,7 @@
text text
@click.stop="deleteUserManage(row)" @click.stop="deleteUserManage(row)"
:title="$t('common.delete')" :title="$t('common.delete')"
v-if="hasPermission([RoleConst.ADMIN,PermissionConst.USER_DELETE],'OR')" v-if="hasPermission([RoleConst.ADMIN,PermissionConst.USER_DELETE],'OR')"
> >
<el-icon><Delete/></el-icon> <el-icon><Delete/></el-icon>
</el-button> </el-button>