permission handling

main
alex 2023-06-24 19:38:05 +02:00
parent 9ba656f28b
commit 92bc08e511
3 changed files with 102 additions and 40 deletions

View File

@ -16,15 +16,12 @@ import {
MyAvatar,
SentMessagesCommands,
WebSocketContext,
hasOneXYPermission,
hasXYPermission,
} from "../../../utils";
import { useContext } from "react";
const columns = [
/*{
title: "ID",
dataIndex: "id",
key: "id",
},*/
{
title: "Creator",
dataIndex: "creator",
@ -124,7 +121,6 @@ export default function GroupTaskTableList({
items.push({
key: groupTask.Id,
//id: groupTask.Id,
creator: (
<>
<MyAvatar avatar={user?.Avatar} /> {user?.Username}
@ -153,13 +149,31 @@ export default function GroupTaskTableList({
return (
<>
<Divider orientation="left">{categoryGroup.category}</Divider>
{hasOneXYPermission(
webSocketContext.User.Permissions,
categoryGroup.category,
Constants.PERMISSIONS.GROUP_TASKS.OVERVIEW.XYNewTask,
Constants.PERMISSIONS.GROUP_TASKS.OVERVIEW.XYReloadGroupConfig
) && (
<div
style={{
marginBottom: 16,
display: "flex",
justifyContent: "space-between",
justifyContent: hasXYPermission(
webSocketContext.User.Permissions,
Constants.PERMISSIONS.GROUP_TASKS.OVERVIEW.XYNewTask,
categoryGroup.category
)
? "space-between"
: "right",
}}
>
{hasXYPermission(
webSocketContext.User.Permissions,
Constants.PERMISSIONS.GROUP_TASKS.OVERVIEW.XYNewTask,
categoryGroup.category
) && (
<Button
type="primary"
icon={<PlusOutlined />}
@ -167,7 +181,13 @@ export default function GroupTaskTableList({
>
New task
</Button>
)}
{hasXYPermission(
webSocketContext.User.Permissions,
Constants.PERMISSIONS.GROUP_TASKS.OVERVIEW.XYReloadGroupConfig,
categoryGroup.category
) && (
<Popconfirm
placement="left"
title="Are you sure you want to reload the group configs?"
@ -176,7 +196,10 @@ export default function GroupTaskTableList({
>
<Button icon={<ReloadOutlined />}>Reload</Button>
</Popconfirm>
)}
</div>
)}
<Table columns={columns} dataSource={getTableItems()} />
</>
);

View File

@ -3,7 +3,7 @@ import { useContext, useState } from "react";
import GroupTasksViewModal from "./GroupTasksViewModal";
import GroupTypeSelectionModal from "./GroupTypeSelectionModal";
import GroupTaskTableList from "./GroupTasksTableList";
import { WebSocketContext } from "../../../utils";
import { Constants, WebSocketContext, hasXYPermission } from "../../../utils";
export default function GroupTasks({ isGroupTasksViewModalOpen }) {
const [isGroupTypeSelectionModalOpen, setIsGroupTypeSelectionModalOpen] =
@ -19,15 +19,18 @@ export default function GroupTasks({ isGroupTasksViewModalOpen }) {
setCurrentSelectedModalGroupType(null);
};
return (
<>
<h1 style={{ fontWeight: "bold" }}>GROUP TASKS</h1>
const GroupTaskTableListItems = () => {
const items = [];
{webSocketContext.CategoryGroups.length === 0 ? (
<Result status="404" title="No group tasks found" />
) : (
webSocketContext.CategoryGroups.map((categoryGroup) => {
return (
webSocketContext.CategoryGroups.forEach((categoryGroup) => {
if (
hasXYPermission(
webSocketContext.User.Permissions,
Constants.PERMISSIONS.GROUP_TASKS.OVERVIEW.XYView,
categoryGroup.category
)
) {
items.push(
<GroupTaskTableList
key={categoryGroup.category}
categoryGroup={categoryGroup}
@ -35,7 +38,20 @@ export default function GroupTasks({ isGroupTasksViewModalOpen }) {
groupTasks={webSocketContext.GroupTasks}
/>
);
})
}
});
return items;
};
return (
<>
<h1 style={{ fontWeight: "bold" }}>GROUP TASKS</h1>
{webSocketContext.CategoryGroups.length === 0 ? (
<Result status="404" title="No group tasks found" />
) : (
<GroupTaskTableListItems />
)}
<GroupTypeSelectionModal

View File

@ -42,6 +42,11 @@ export const Constants = {
ACCEPTED_FILE_TYPES: ["image/png", "image/jpeg", "image/jpg"],
PERMISSIONS: {
GROUP_TASKS: {
OVERVIEW: {
XYNewTask: "group_tasks.overview.XY.new_task",
XYReloadGroupConfig: "group_tasks.overview.XY.reload_group_config",
XYView: "group_tasks.overview.XY.view",
},
HISTORY: "group_tasks.history",
},
ALL_USERS: {
@ -974,6 +979,12 @@ export function hasPermission(userPermissions, permission) {
return userPermissions.includes(permission);
}
export function hasXYPermission(userPermissions, permission, xyValue) {
return userPermissions.includes(
permission.replace("XY", xyValue.toLowerCase())
);
}
export function hasOnePermission(userPermissions, ...permissions) {
for (const permission of permissions) {
if (userPermissions.includes(permission)) {
@ -983,3 +994,15 @@ export function hasOnePermission(userPermissions, ...permissions) {
return false;
}
export function hasOneXYPermission(userPermissions, xyValue, ...permissions) {
for (const permission of permissions) {
if (
userPermissions.includes(permission.replace("XY", xyValue.toLowerCase()))
) {
return true;
}
}
return false;
}