feat(frontend): finished login form with validation

This commit is contained in:
2025-02-21 09:16:07 -06:00
parent d939332499
commit 9719451580
25 changed files with 551 additions and 230 deletions

View 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;
}

View 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;
}