Availability based on permissions

This commit is contained in:
cdricms
2025-02-19 16:16:47 +01:00
parent 446813315d
commit 2011ae93b6
26 changed files with 1071 additions and 794 deletions

22
frontend/lib/getMe.ts Normal file
View File

@@ -0,0 +1,22 @@
import { cache } from "react";
import { API_URL } from "./constants";
import { ApiResponse } from "@/types/types";
import IUser from "@/interfaces/IUser";
import { cookies } from "next/headers";
const getMe = cache(
async (sessionCookie?: string): Promise<ApiResponse<IUser> | null> => {
if (!sessionCookie) {
const store = await cookies();
const token = store.get("auth_token")?.value;
if (!token) return null;
sessionCookie = token;
}
const res = await fetch(`${API_URL}/users/me`, {
headers: { Authorization: `Bearer ${sessionCookie}` },
});
return await res.json();
},
);
export default getMe;

View File

@@ -0,0 +1,25 @@
import { Role } from "@/types/types";
export default function hasPermissions(
roles: Role[],
permissions: { [key: string]: string[] },
) {
const permissionsSet: Map<string, null> = new Map();
for (const role of roles) {
if (!role.permissions) continue;
for (const perm of role?.permissions) {
const key = perm.resource + ":" + perm.action;
permissionsSet.set(key, null);
}
}
for (const [perm, actions] of Object.entries(permissions)) {
for (const action of actions) {
if (!permissionsSet.has(perm + ":" + action)) {
return false;
}
}
}
return true;
}