-
Ligin
- {isAuthenticated() ? (
- <>
-
Hello User!
-
- >
- ) : (
-
- )}
+
);
}
diff --git a/frontend/src/utils/moduleActive.ts b/frontend/src/utils/moduleActive.ts
new file mode 100644
index 0000000..ce270fa
--- /dev/null
+++ b/frontend/src/utils/moduleActive.ts
@@ -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;
+}
diff --git a/frontend/src/utils/userAccess.ts b/frontend/src/utils/userAccess.ts
new file mode 100644
index 0000000..47b5c20
--- /dev/null
+++ b/frontend/src/utils/userAccess.ts
@@ -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;
+}
diff --git a/package.json b/package.json
index 7ff2a31..9e4fd33 100644
--- a/package.json
+++ b/package.json
@@ -4,18 +4,18 @@
"description": "",
"main": "index.ts",
"scripts": {
- "dev": "dotenvx run -- bun run -r --parallel --aggregate-output dev",
- "dev:all": "concurrently -n 'server,frontend' -c '#007755,#2f6da3' 'cd server && bun run dev' 'cd frontend && bun run dev'",
+ "dev": "concurrently -n 'server,frontend' -c '#007755,#2f6da3' 'cd server && bun run dev' 'cd frontend && bun run dev'",
"dev:server": "bun --env-file .env --watch server/index.ts",
"dev:ocme": "bun --env-file .env --watch ocme/index.ts",
"dev:frontend": "cd frontend && bunx --bun vite",
"build:server": "cd apps/server && bun build index.js --outdir ../../dist/server",
"build:ocme": "rimraf dist/ocme && cd apps/ocme && bun build index.js --outdir ../../dist/ocme",
"build:front": "cd frontend && rimraf frontend/dist && bun run build",
- "start": "cd server && bun run --env-file ../.env ./index.js",
+ "start": "bun --env-file .env server/index.js",
"commit": "cz",
"clean": "rimraf dist/server",
- "deploy": "standard-version --conventional-commits"
+ "deploy": "standard-version --conventional-commits",
+ "ui:add": "cd frontend && bun shadcn add "
},
"keywords": [],
"author": "",
diff --git a/server/src/app.ts b/server/src/app.ts
index 9a0b0eb..7acae4c 100644
--- a/server/src/app.ts
+++ b/server/src/app.ts
@@ -10,7 +10,6 @@ import scalar from "./route/scalar";
// services
import {ocmeService} from "./services/ocme/ocmeServer";
-console.log(process.env.JWT_SECRET);
const app = new OpenAPIHono();
app.use("*", logger());
@@ -52,8 +51,8 @@ routes.forEach((route) => {
// return c.json({success: true, message: "is authenticated"});
// });
-app.get("*", serveStatic({root: "../frontend/dist"}));
-app.get("*", serveStatic({path: "../frontend/dist/index.html"}));
+app.get("*", serveStatic({root: "./frontend/dist"}));
+app.get("*", serveStatic({path: "./frontend/dist/index.html"}));
export default app;
diff --git a/server/src/services/auth/routes/login.ts b/server/src/services/auth/routes/login.ts
index ecd4414..25c049e 100644
--- a/server/src/services/auth/routes/login.ts
+++ b/server/src/services/auth/routes/login.ts
@@ -63,6 +63,8 @@ const route = createRoute({
app.openapi(route, async (c) => {
let body: {username: string; password: string};
+
+ console.log(`Trying to login`);
try {
body = await c.req.json();
} catch (error) {
diff --git a/server/tsconfig.json b/server/tsconfig.json
deleted file mode 100644
index b925aba..0000000
--- a/server/tsconfig.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "extends": "../../tsconfig.json",
- "compilerOptions": {
- "outDir": "dist"
- },
- "include": ["src", "index.ts"]
-}
diff --git a/tsconfig.json b/tsconfig.json
index 2cf0702..f1152c3 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -18,6 +18,8 @@
"allowJs": true,
"types": [
"bun-types" // add Bun global
- ]
- }
+ ],
+ "outDir": "dist"
+ },
+ "include": ["./server/src", "./server/index.ts"]
}