feat(frontend): finished login form with validation
This commit is contained in:
@@ -6,91 +6,17 @@ import {QualitySideBar} from "./side-components/quality";
|
||||
import {ForkliftSideBar} from "./side-components/forklift";
|
||||
import {EomSideBar} from "./side-components/eom";
|
||||
import {AdminSideBar} from "./side-components/admin";
|
||||
|
||||
type Feature = string;
|
||||
|
||||
interface Module {
|
||||
id: number;
|
||||
name: string;
|
||||
features: Feature[];
|
||||
active: boolean;
|
||||
}
|
||||
|
||||
interface RolePermissions {
|
||||
[moduleName: string]: Feature[];
|
||||
}
|
||||
|
||||
interface Roles {
|
||||
[roleName: string]: RolePermissions;
|
||||
}
|
||||
|
||||
interface User {
|
||||
id: number;
|
||||
username: string;
|
||||
role: keyof Roles;
|
||||
}
|
||||
const modules: Module[] = [
|
||||
{id: 1, name: "production", active: true, features: ["view", "edit", "approve"]},
|
||||
{id: 2, name: "logistics", active: true, features: ["view", "assign", "track"]},
|
||||
{id: 3, name: "quality", active: false, features: ["view", "audit", "approve"]},
|
||||
{id: 4, name: "forklift", active: true, features: ["view", "request", "operate"]},
|
||||
{id: 5, name: "admin", active: true, features: ["view", "manage_users", "view_logs", "settings"]},
|
||||
];
|
||||
|
||||
const rolePermissions: Roles = {
|
||||
admin: {
|
||||
production: ["view", "edit", "approve"],
|
||||
logistics: ["view", "assign", "track"],
|
||||
quality: ["view", "audit", "approve"],
|
||||
forklift: ["view", "request", "operate"],
|
||||
admin: ["view", "manage_users", "view_logs", "settings"],
|
||||
},
|
||||
manager: {
|
||||
production: ["view", "edit"],
|
||||
logistics: ["view", "assign"],
|
||||
quality: ["view", "audit"],
|
||||
forklift: ["view", "request"],
|
||||
admin: ["view_logs"],
|
||||
},
|
||||
supervisor: {
|
||||
production: ["view"],
|
||||
logistics: ["view"],
|
||||
quality: ["view"],
|
||||
forklift: ["view", "request"],
|
||||
admin: [],
|
||||
},
|
||||
user: {
|
||||
production: ["view"],
|
||||
logistics: [],
|
||||
quality: [],
|
||||
forklift: [],
|
||||
admin: [],
|
||||
},
|
||||
};
|
||||
|
||||
// const users: User[] = [
|
||||
// {id: 1, username: "admin", role: "admin"},
|
||||
// {id: 2, username: "manager", role: "manager"},
|
||||
// {id: 3, username: "supervisor", role: "supervisor"},
|
||||
// {id: 4, username: "user", role: "user"},
|
||||
// ];
|
||||
|
||||
function hasAccess(user: User, moduleName: string, feature: Feature): boolean {
|
||||
return rolePermissions[user.role]?.[moduleName]?.includes(feature) || false;
|
||||
}
|
||||
|
||||
function moduleActive(moduleName: string): boolean {
|
||||
const module = modules.find((m) => m.name === moduleName);
|
||||
return module ? module.active : false;
|
||||
}
|
||||
import {useSessionStore} from "../../lib/store/sessionStore";
|
||||
import {hasAccess} from "../../utils/userAccess";
|
||||
import {moduleActive} from "../../utils/moduleActive";
|
||||
|
||||
export function AppSidebar() {
|
||||
const user = {id: 4, username: "admin", role: "admin"};
|
||||
const {user} = useSessionStore();
|
||||
return (
|
||||
<Sidebar collapsible="icon">
|
||||
<SidebarContent>
|
||||
<Header />
|
||||
{hasAccess(user, "production", "view") && moduleActive("production") && <ProductionSideBar />}
|
||||
{moduleActive("production") && <ProductionSideBar />}
|
||||
{hasAccess(user, "logistics", "view") && moduleActive("logistics") && <LogisticsSideBar />}
|
||||
{hasAccess(user, "forklift", "view") && moduleActive("forklift") && <ForkliftSideBar />}
|
||||
{hasAccess(user, "eom", "view") && moduleActive("admin") && <EomSideBar />}
|
||||
|
||||
Reference in New Issue
Block a user