permission handling
parent
4adff4e0d9
commit
3e74b28f73
|
@ -1,14 +1,22 @@
|
|||
import { Route, Routes } from "react-router-dom";
|
||||
import Dashboard from "../../Pages/Dashboard";
|
||||
import GroupTasks from "../../Pages/GroupTasks";
|
||||
import { Constants } from "../../utils";
|
||||
import {
|
||||
Constants,
|
||||
WebSocketContext,
|
||||
hasOnePermission,
|
||||
hasPermission,
|
||||
} from "../../utils";
|
||||
import UserProfile from "../../Pages/UserProfile";
|
||||
import Users from "../../Pages/Users";
|
||||
import Scanners from "../../Pages/Scanners";
|
||||
import AdminAreaRoles from "../../Pages/AdminArea/Roles";
|
||||
import AdminAreaLogs from "../../Pages/AdminArea/Logs";
|
||||
import AllUsers from "../../Pages/AllUsers";
|
||||
import { useContext } from "react";
|
||||
|
||||
export default function AppRoutes() {
|
||||
const webSocketContext = useContext(WebSocketContext);
|
||||
|
||||
return (
|
||||
<Routes>
|
||||
<Route path="/" element={<Dashboard />} />
|
||||
|
@ -20,11 +28,28 @@ export default function AppRoutes() {
|
|||
path={Constants.ROUTE_PATHS.GROUP_TASKS_VIEW + ":paramGroupTaskId"}
|
||||
element={<GroupTasks isGroupTasksViewModalOpen={true} />}
|
||||
/>
|
||||
<Route path="/scanners" element={<Scanners />} />
|
||||
<Route path="/users" element={<Users />} />
|
||||
|
||||
{hasPermission(
|
||||
webSocketContext.User.Permissions,
|
||||
Constants.PERMISSIONS.SCANNER.USE_SCANNERS
|
||||
) && <Route path="/scanners" element={<Scanners />} />}
|
||||
|
||||
<Route path="/users" element={<AllUsers />} />
|
||||
|
||||
<Route path="/user-profile" element={<UserProfile />} />
|
||||
<Route path="/admin-area/roles" element={<AdminAreaRoles />} />
|
||||
<Route path="/admin-area/logs" element={<AdminAreaLogs />} />
|
||||
|
||||
{hasOnePermission(
|
||||
webSocketContext.User.Permissions,
|
||||
Constants.PERMISSIONS.ADMIN_AREA.ROLES.ADD_ROLE,
|
||||
Constants.PERMISSIONS.ADMIN_AREA.ROLES.UPDATE_ROLE,
|
||||
Constants.PERMISSIONS.ADMIN_AREA.ROLES.DELETE_ROLE,
|
||||
Constants.PERMISSIONS.ADMIN_AREA.ROLES.ADD_USER_TO_ROLE
|
||||
) && <Route path="/admin-area/roles" element={<AdminAreaRoles />} />}
|
||||
|
||||
{hasPermission(
|
||||
webSocketContext.User.Permissions,
|
||||
Constants.PERMISSIONS.ADMIN_AREA.LOGS
|
||||
) && <Route path="/admin-area/logs" element={<AdminAreaLogs />} />}
|
||||
</Routes>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -13,7 +13,13 @@ import Sider from "antd/es/layout/Sider";
|
|||
import { useContext, useEffect, useState } from "react";
|
||||
import { useLocation, useNavigate } from "react-router-dom";
|
||||
import PropTypes from "prop-types";
|
||||
import { Constants, MyAvatar, WebSocketContext, getUserId } from "../../utils";
|
||||
import {
|
||||
Constants,
|
||||
MyAvatar,
|
||||
WebSocketContext,
|
||||
getUserId,
|
||||
hasPermission,
|
||||
} from "../../utils";
|
||||
|
||||
export default function SideMenu({ userSession, setUserSession }) {
|
||||
const location = useLocation();
|
||||
|
@ -64,8 +70,9 @@ export default function SideMenu({ userSession, setUserSession }) {
|
|||
];
|
||||
|
||||
if (
|
||||
webSocketContext.User.Permissions.includes(
|
||||
Constants.PERMISSIONS.ADMIN_AREA.ADD_ROLE
|
||||
hasPermission(
|
||||
webSocketContext.User.Permissions,
|
||||
Constants.PERMISSIONS.ADMIN_AREA.ROLES.ADD_ROLE
|
||||
)
|
||||
) {
|
||||
items.push({
|
||||
|
@ -91,12 +98,22 @@ export default function SideMenu({ userSession, setUserSession }) {
|
|||
};
|
||||
|
||||
const getSecondMenuItems = () => {
|
||||
let items = [
|
||||
{
|
||||
let items = [];
|
||||
|
||||
if (
|
||||
hasPermission(
|
||||
webSocketContext.User.Permissions,
|
||||
Constants.PERMISSIONS.SCANNER.USE_SCANNERS
|
||||
)
|
||||
) {
|
||||
items.push({
|
||||
icon: <ScanOutlined />,
|
||||
label: getCurrentUsedScannerName(),
|
||||
key: "/scanners",
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
items.push(
|
||||
{
|
||||
icon: (
|
||||
<Badge
|
||||
|
@ -136,8 +153,8 @@ export default function SideMenu({ userSession, setUserSession }) {
|
|||
}).catch(console.error);
|
||||
},
|
||||
key: "/",
|
||||
},
|
||||
];
|
||||
}
|
||||
);
|
||||
|
||||
return items;
|
||||
};
|
||||
|
|
|
@ -1,22 +1,24 @@
|
|||
import { Popconfirm, Popover, Select, Space, Table, notification } from "antd";
|
||||
import {
|
||||
Constants,
|
||||
FormatDatetime,
|
||||
MyAvatar,
|
||||
SentMessagesCommands,
|
||||
WebSocketContext,
|
||||
getConnectionStatusItem,
|
||||
hasPermission,
|
||||
} from "../../utils";
|
||||
import { useContext, useState } from "react";
|
||||
import { Link } from "react-router-dom";
|
||||
|
||||
export default function Users() {
|
||||
export default function AllUsers() {
|
||||
const webSocketContext = useContext(WebSocketContext);
|
||||
const [selectedRoleId, setSelectedRoleId] = useState("");
|
||||
const [notificationApi, notificationContextHolder] =
|
||||
notification.useNotification();
|
||||
|
||||
const getTableContent = () => {
|
||||
return [
|
||||
let items = [
|
||||
{
|
||||
title: "Avatar",
|
||||
dataIndex: "avatar",
|
||||
|
@ -42,7 +44,15 @@ export default function Users() {
|
|||
dataIndex: "lastOnline",
|
||||
key: "lastOnline",
|
||||
},
|
||||
{
|
||||
];
|
||||
|
||||
if (
|
||||
hasPermission(
|
||||
webSocketContext.User.Permissions,
|
||||
Constants.PERMISSIONS.ALL_USERS.ACTION.CHANGE_ROLE
|
||||
)
|
||||
) {
|
||||
items.push({
|
||||
title: "Action",
|
||||
key: "action",
|
||||
render: (_, record) => (
|
||||
|
@ -93,8 +103,10 @@ export default function Users() {
|
|||
</Popconfirm>
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
];
|
||||
});
|
||||
}
|
||||
|
||||
return items;
|
||||
};
|
||||
|
||||
const getTableItems = () => {
|
31
src/utils.js
31
src/utils.js
|
@ -41,9 +41,22 @@ export const Constants = {
|
|||
MAX_AVATAR_SIZE: 5 * 1024 * 1024,
|
||||
ACCEPTED_FILE_TYPES: ["image/png", "image/jpeg", "image/jpg"],
|
||||
PERMISSIONS: {
|
||||
ALL_USERS: {
|
||||
ACTION: {
|
||||
CHANGE_ROLE: "all_users.action.change_role",
|
||||
},
|
||||
},
|
||||
SCANNER: {
|
||||
USE_SCANNERS: "scanner.use_scanners",
|
||||
},
|
||||
ADMIN_AREA: {
|
||||
ADD_ROLE: "admin_area.roles.add_role",
|
||||
UPDATE_ROLE: "admin_area.roles.update_role",
|
||||
ROLES: {
|
||||
ADD_ROLE: "admin_area.roles.add_role",
|
||||
UPDATE_ROLE: "admin_area.roles.update_role",
|
||||
DELETE_ROLE: "admin_area.roles.delete_role",
|
||||
ADD_USER_TO_ROLE: "admin_area.roles.add_user_to_role",
|
||||
},
|
||||
LOGS: "admin_area.logs",
|
||||
},
|
||||
},
|
||||
};
|
||||
|
@ -954,3 +967,17 @@ export function isEmailValid(email) {
|
|||
export function CapitalizeFirstLetter(string) {
|
||||
return string.charAt(0).toUpperCase() + string.slice(1);
|
||||
}
|
||||
|
||||
export function hasPermission(userPermissions, permission) {
|
||||
return userPermissions.includes(permission);
|
||||
}
|
||||
|
||||
export function hasOnePermission(userPermissions, ...permissions) {
|
||||
for (const permission of permissions) {
|
||||
if (userPermissions.includes(permission)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue