feat(frontend): finished login form with validation
This commit is contained in:
20
frontend/src/utils/moduleActive.ts
Normal file
20
frontend/src/utils/moduleActive.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
type Feature = string;
|
||||
interface Module {
|
||||
id: number;
|
||||
name: string;
|
||||
features: Feature[];
|
||||
active: boolean;
|
||||
}
|
||||
|
||||
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"]},
|
||||
];
|
||||
|
||||
export function moduleActive(moduleName: string): boolean {
|
||||
const module = modules.find((m) => m.name === moduleName);
|
||||
return module ? module.active : false;
|
||||
}
|
||||
52
frontend/src/utils/userAccess.ts
Normal file
52
frontend/src/utils/userAccess.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
interface User {
|
||||
id: number;
|
||||
username: string;
|
||||
role: keyof Roles;
|
||||
}
|
||||
|
||||
interface Roles {
|
||||
[roleName: string]: RolePermissions;
|
||||
}
|
||||
|
||||
interface RolePermissions {
|
||||
[moduleName: string]: Feature[];
|
||||
}
|
||||
|
||||
type Feature = string;
|
||||
|
||||
const rolePermissions: Roles = {
|
||||
admin: {
|
||||
production: ["view", "manage", "update", "admin"],
|
||||
logistics: ["view", "manage", "update", "admin"],
|
||||
quality: ["view", "request", "manage", "update", "admin"],
|
||||
forklift: ["view", "manage", "update", "admin"],
|
||||
admin: ["view", "view_logs", "manage", "update", "admin"],
|
||||
},
|
||||
manager: {
|
||||
production: ["view", "manage"],
|
||||
logistics: ["view", "manage"],
|
||||
quality: ["view", "manage"],
|
||||
forklift: ["view", "manage"],
|
||||
admin: ["view_logs"],
|
||||
},
|
||||
supervisor: {
|
||||
production: ["view", "update"],
|
||||
logistics: ["view", "update"],
|
||||
quality: ["view", "update"],
|
||||
forklift: ["view"],
|
||||
admin: [],
|
||||
},
|
||||
user: {
|
||||
production: ["view"],
|
||||
logistics: ["view"],
|
||||
quality: ["view"],
|
||||
forklift: [],
|
||||
admin: [],
|
||||
},
|
||||
};
|
||||
|
||||
// user will need access to the module.
|
||||
// users role will determine there visual access
|
||||
export function hasAccess(user: User | null, moduleName: string, feature: Feature): boolean {
|
||||
return user?.role ? rolePermissions[user.role]?.[moduleName]?.includes(feature) || false : false;
|
||||
}
|
||||
Reference in New Issue
Block a user