mirror of
https://gitee.com/nocobase/nocobase.git
synced 2025-05-05 13:39:24 +08:00
67 lines
1.9 KiB
TypeScript
67 lines
1.9 KiB
TypeScript
/**
|
|
* This file is part of the NocoBase (R) project.
|
|
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
* Authors: NocoBase Team.
|
|
*
|
|
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
*/
|
|
|
|
import React from 'react';
|
|
import { useTranslation } from 'react-i18next';
|
|
import {
|
|
useCurrentRoles,
|
|
useAPIClient,
|
|
SchemaSettingsItem,
|
|
SelectWithTitle,
|
|
useCurrentRoleMode,
|
|
} from '@nocobase/client';
|
|
import { Divider } from 'antd';
|
|
|
|
export const SwitchRole = () => {
|
|
const { t } = useTranslation();
|
|
const api = useAPIClient();
|
|
const roles = useCurrentRoles();
|
|
const roleMode = useCurrentRoleMode();
|
|
const currentRole = roles.find((role) => role.name === api.auth.role)?.name;
|
|
|
|
// 当角色数量小于等于1 或者 是仅使用合并角色模式时,不显示切换角色选项
|
|
if (roles.length <= 1 || roleMode === 'only-use-union') {
|
|
return null;
|
|
}
|
|
return (
|
|
<SchemaSettingsItem eventKey="SwitchRole" title="SwitchRole">
|
|
<SelectWithTitle
|
|
title={t('Switch role')}
|
|
fieldNames={{
|
|
label: 'title',
|
|
value: 'name',
|
|
}}
|
|
options={roles.reduce((acc, role) => {
|
|
acc.push(role);
|
|
if (role.name === '__union__') {
|
|
acc.push({
|
|
name: 'divider',
|
|
title: <Divider style={{ margin: '2px 1px' }} />,
|
|
disabled: true,
|
|
style: {
|
|
minHeight: 0,
|
|
height: 'auto',
|
|
padding: 0,
|
|
},
|
|
});
|
|
}
|
|
return acc;
|
|
}, [])}
|
|
defaultValue={currentRole || roles[0].name}
|
|
onChange={async (roleName) => {
|
|
api.auth.setRole(roleName);
|
|
await api.resource('users').setDefaultRole({ values: { roleName } });
|
|
location.reload();
|
|
window.location.reload();
|
|
}}
|
|
/>
|
|
</SchemaSettingsItem>
|
|
);
|
|
};
|