Skip to content

Commit a0b1111

Browse files
committed
feat(权限页面):成员权限视角增加角色权限列,展示来自角色的授权。此变更引入了新的选择器和UI调整,以支持这一功能。
1 parent 92a147f commit a0b1111

File tree

15 files changed

+258
-78
lines changed

15 files changed

+258
-78
lines changed

core/src/main/java/datart/core/mappers/ext/RoleMapperExt.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,5 +134,24 @@ public interface RoleMapperExt extends RoleMapper {
134134
})
135135
List<Role> selectUserRoles(@Param("orgId") String orgId, @Param("userId") String userId);
136136

137+
@Select({
138+
"SELECT ",
139+
" r.* ",
140+
"FROM ",
141+
" role r ",
142+
" JOIN rel_role_user rru ON r.id IN ( ",
143+
" SELECT DISTINCT ",
144+
" r1.id ",
145+
" FROM ",
146+
" role r1 ",
147+
" WHERE ",
148+
" r1.org_id = #{orgId}) ",
149+
" ",
150+
" AND r.id = rru.role_id ",
151+
" AND r.type = 'NORMAL' ",
152+
" AND rru.user_id = #{userId}"
153+
})
154+
List<Role> selectUserNormalRoles(@Param("orgId") String orgId, @Param("userId") String userId);
155+
137156

138157
}

frontend/src/app/pages/MainPage/pages/PermissionPage/Main/PermissionForm/PermissionTable.tsx

Lines changed: 90 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ interface PermissionTableProps {
4646
dataSource: DataSourceViewModel[] | undefined;
4747
resourceLoading: boolean;
4848
privileges: Privilege[] | undefined;
49+
rolePrivileges: Privilege[] | undefined;
4950
onPrivilegeChange: (
5051
treeData: DataSourceTreeNode[],
5152
) => (
@@ -64,6 +65,7 @@ export const PermissionTable = memo(
6465
dataSource,
6566
resourceLoading,
6667
privileges,
68+
rolePrivileges,
6769
onPrivilegeChange,
6870
vizSubTypes,
6971
}: PermissionTableProps) => {
@@ -79,6 +81,7 @@ export const PermissionTable = memo(
7981
return setTreeDataWithPrivilege(
8082
originTreeData,
8183
[...privileges],
84+
[...(rolePrivileges || [])],
8285
viewpoint,
8386
viewpointType,
8487
dataSourceType,
@@ -93,6 +96,7 @@ export const PermissionTable = memo(
9396
dataSourceType,
9497
dataSource,
9598
privileges,
99+
rolePrivileges,
96100
vizSubTypes,
97101
]);
98102

@@ -117,36 +121,92 @@ export const PermissionTable = memo(
117121
[treeData, onPrivilegeChange],
118122
);
119123

124+
const rolePrivilegeChange: () => void = () => {};
125+
120126
const columns = useMemo(() => {
121-
const columns: TableColumnProps<DataSourceTreeNode>[] = [
122-
{
123-
dataIndex: 'name',
124-
title:
125-
viewpoint === Viewpoints.Resource
126-
? t('subjectName')
127-
: t('resourceName'),
128-
},
129-
{
130-
title: t('privileges'),
131-
align: 'center' as const,
132-
width: getPrivilegeSettingWidth(
133-
viewpoint,
134-
viewpointType,
135-
dataSourceType,
136-
vizSubTypes,
137-
),
138-
render: (_, record) => (
139-
<PrivilegeSetting
140-
record={record}
141-
viewpoint={viewpoint}
142-
viewpointType={viewpointType}
143-
dataSourceType={dataSourceType}
144-
onChange={privilegeChange}
145-
vizSubTypes={vizSubTypes}
146-
/>
147-
),
148-
},
149-
];
127+
const columns: TableColumnProps<DataSourceTreeNode>[] =
128+
viewpointType === SubjectTypes.UserRole
129+
? [
130+
{
131+
dataIndex: 'name',
132+
title: t('resourceName'),
133+
},
134+
{
135+
title: t('subPrivileges'),
136+
align: 'center' as const,
137+
width: getPrivilegeSettingWidth(
138+
viewpoint,
139+
viewpointType,
140+
dataSourceType,
141+
vizSubTypes,
142+
),
143+
render: (_, record) => (
144+
<PrivilegeSetting
145+
record={record}
146+
permissionArrayName={'permissionArray'}
147+
viewpoint={viewpoint}
148+
viewpointType={viewpointType}
149+
dataSourceType={dataSourceType}
150+
onChange={privilegeChange}
151+
vizSubTypes={vizSubTypes}
152+
disabled={false}
153+
/>
154+
),
155+
},
156+
{
157+
title: t('rolePrivileges'),
158+
align: 'center' as const,
159+
width: getPrivilegeSettingWidth(
160+
viewpoint,
161+
viewpointType,
162+
dataSourceType,
163+
vizSubTypes,
164+
),
165+
render: (_, record) => (
166+
<PrivilegeSetting
167+
record={record}
168+
permissionArrayName={'rolePermissionArray'}
169+
viewpoint={viewpoint}
170+
viewpointType={viewpointType}
171+
dataSourceType={dataSourceType}
172+
onChange={rolePrivilegeChange}
173+
vizSubTypes={vizSubTypes}
174+
disabled={true}
175+
/>
176+
),
177+
},
178+
]
179+
: [
180+
{
181+
dataIndex: 'name',
182+
title:
183+
viewpoint === Viewpoints.Resource
184+
? t('subjectName')
185+
: t('resourceName'),
186+
},
187+
{
188+
title: t('privileges'),
189+
align: 'center' as const,
190+
width: getPrivilegeSettingWidth(
191+
viewpoint,
192+
viewpointType,
193+
dataSourceType,
194+
vizSubTypes,
195+
),
196+
render: (_, record) => (
197+
<PrivilegeSetting
198+
record={record}
199+
permissionArrayName={'permissionArray'}
200+
viewpoint={viewpoint}
201+
viewpointType={viewpointType}
202+
dataSourceType={dataSourceType}
203+
onChange={privilegeChange}
204+
vizSubTypes={vizSubTypes}
205+
disabled={false}
206+
/>
207+
),
208+
},
209+
];
150210
return columns;
151211
}, [
152212
viewpoint,
@@ -175,7 +235,7 @@ export const PermissionTable = memo(
175235
dataSource={filteredData}
176236
loading={resourceLoading}
177237
pagination={false}
178-
size="middle"
238+
size="small"
179239
expandable={{
180240
expandedRowKeys,
181241
onExpandedRowsChange: onExpand,

frontend/src/app/pages/MainPage/pages/PermissionPage/Main/PermissionForm/PrivilegeSetting.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import { getChangedPermission, getPrivilegeSettingType } from './utils';
3333

3434
interface PrivilegeSettingProps {
3535
record: DataSourceTreeNode;
36+
permissionArrayName: string;
3637
viewpoint: Viewpoints;
3738
viewpointType: ResourceTypes | SubjectTypes;
3839
dataSourceType: ResourceTypes | SubjectTypes;
@@ -43,16 +44,19 @@ interface PrivilegeSettingProps {
4344
index: number,
4445
base: PermissionLevels,
4546
) => void;
47+
disabled: boolean;
4648
}
4749

4850
export const PrivilegeSetting = memo(
4951
({
5052
record,
53+
permissionArrayName,
5154
viewpoint,
5255
viewpointType,
5356
dataSourceType,
5457
vizSubTypes,
5558
onChange,
59+
disabled,
5660
}: PrivilegeSettingProps) => {
5761
const [values, setValues] = useState<PermissionLevels[]>(
5862
getDefaultPermissionArray(vizSubTypes),
@@ -79,8 +83,8 @@ export const PrivilegeSetting = memo(
7983
);
8084

8185
useEffect(() => {
82-
setValues(record.permissionArray);
83-
}, [record]);
86+
setValues(record[permissionArrayName]);
87+
}, [record, permissionArrayName]);
8488
return (
8589
<Space>
8690
{RESOURCE_TYPE_PERMISSION_MAPPING[
@@ -91,6 +95,7 @@ export const PrivilegeSetting = memo(
9195
key={PermissionLevels[level]}
9296
checked={level === values[index]}
9397
onChange={privilegeChange(index, level)}
98+
disabled={disabled}
9499
>
95100
{t(
96101
`privilegeLabel.${(

frontend/src/app/pages/MainPage/pages/PermissionPage/Main/PermissionForm/VizPermissionForm.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,10 @@ import {
3131
Viewpoints,
3232
VizResourceSubTypes,
3333
} from '../../constants';
34-
import { makeSelectPrivileges } from '../../slice/selectors';
34+
import {
35+
makeSelectPrivileges,
36+
makeSelectRolePrivileges,
37+
} from '../../slice/selectors';
3538
import { grantPermissions } from '../../slice/thunks';
3639
import {
3740
DataSourceTreeNode,
@@ -85,9 +88,13 @@ export const VizPermissionForm = memo(
8588
);
8689
const dispatch = useDispatch();
8790
const selectPrivileges = useMemo(makeSelectPrivileges, []);
91+
const selectRolePrivileges = useMemo(makeSelectRolePrivileges, []);
8892
const privileges = useSelector(state =>
8993
selectPrivileges(state, { viewpoint, dataSourceType }),
9094
);
95+
const rolePrivileges = useSelector(state =>
96+
selectRolePrivileges(state, { viewpoint, dataSourceType }),
97+
);
9198
const t = useI18NPrefix('permission');
9299

93100
const vizTreeData = useMemo(() => {
@@ -100,6 +107,7 @@ export const VizPermissionForm = memo(
100107
return setTreeDataWithPrivilege(
101108
originTreeData,
102109
[...privileges],
110+
[],
103111
viewpoint,
104112
viewpointType,
105113
dataSourceType,
@@ -196,6 +204,7 @@ export const VizPermissionForm = memo(
196204
)
197205
: permissionArray,
198206
getDefaultPermissionArray(),
207+
getDefaultPermissionArray(),
199208
);
200209
// 根据改变后的树重新计算出权限列表
201210
const recalculatedPrivileges = getRecalculatedPrivileges(
@@ -345,6 +354,7 @@ export const VizPermissionForm = memo(
345354
dataSource={folders}
346355
resourceLoading={folderListLoading}
347356
privileges={privileges}
357+
rolePrivileges={rolePrivileges}
348358
onPrivilegeChange={privilegeChange}
349359
/>
350360
</Form.Item>
@@ -364,6 +374,7 @@ export const VizPermissionForm = memo(
364374
dataSource={storyboards}
365375
resourceLoading={storyboardListLoading}
366376
privileges={privileges}
377+
rolePrivileges={rolePrivileges}
367378
onPrivilegeChange={privilegeChange}
368379
/>
369380
</Form.Item>
@@ -384,7 +395,7 @@ const Wrapper = styled.div`
384395
`;
385396

386397
const FormContent = styled(Form)`
387-
width: 960px;
398+
width: 1230px;
388399
389400
.vizTable {
390401
display: none;

frontend/src/app/pages/MainPage/pages/PermissionPage/Main/PermissionForm/index.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,10 @@ import {
2929
SubjectTypes,
3030
Viewpoints,
3131
} from '../../constants';
32-
import { makeSelectPrivileges } from '../../slice/selectors';
32+
import {
33+
makeSelectPrivileges,
34+
makeSelectRolePrivileges,
35+
} from '../../slice/selectors';
3336
import { grantPermissions } from '../../slice/thunks';
3437
import {
3538
DataSourceTreeNode,
@@ -75,9 +78,13 @@ export const PermissionForm = memo(
7578
}: PermissionFormProps) => {
7679
const dispatch = useDispatch();
7780
const selectPrivileges = useMemo(makeSelectPrivileges, []);
81+
const selectRolePrivileges = useMemo(makeSelectRolePrivileges, []);
7882
const privileges = useSelector(state =>
7983
selectPrivileges(state, { viewpoint, dataSourceType }),
8084
);
85+
const rolePrivileges = useSelector(state =>
86+
selectRolePrivileges(state, { viewpoint, dataSourceType }),
87+
);
8188
const t = useI18NPrefix('permission');
8289

8390
const { moduleEnabled } = useMemo(() => {
@@ -154,6 +161,7 @@ export const PermissionForm = memo(
154161
)
155162
: permissionArray,
156163
getDefaultPermissionArray(),
164+
getDefaultPermissionArray(),
157165
);
158166
// 根据改变后的树重新计算出权限列表
159167
const recalculatedPrivileges = getRecalculatedPrivileges(
@@ -289,6 +297,7 @@ export const PermissionForm = memo(
289297
dataSource={dataSource}
290298
resourceLoading={resourceLoading}
291299
privileges={privileges}
300+
rolePrivileges={rolePrivileges}
292301
onPrivilegeChange={privilegeChange}
293302
/>
294303
</Form.Item>

0 commit comments

Comments
 (0)