Browse Source

Update task & project access right (Need MAINTAIN_TASK_TEMPLATE, MAINTAIN_PROJECT)

tags/Baseline_30082024_FRONTEND_UAT
cyril.tsui 1 year ago
parent
commit
bbbebfcae4
4 changed files with 14 additions and 4 deletions
  1. +1
    -1
      src/app/(main)/projects/page.tsx
  2. +1
    -1
      src/app/utils/commonUtil.ts
  3. +3
    -2
      src/components/NavigationContent/NavigationContent.tsx
  4. +9
    -0
      src/middleware.ts

+ 1
- 1
src/app/(main)/projects/page.tsx View File

@@ -22,7 +22,7 @@ const Projects: React.FC = async () => {
fetchProjectCategories();
const projects = await fetchProjects();
const abilities = await getUserAbilities()
if (![VIEW_PROJECT, MAINTAIN_PROJECT].some(ability => abilities.includes(ability))) {
if (![MAINTAIN_PROJECT].some(ability => abilities.includes(ability))) {
notFound();
}



+ 1
- 1
src/app/utils/commonUtil.ts View File

@@ -53,5 +53,5 @@ export function readIntFromString(input: string): [string, number | null] | stri

export const getUserAbilities = async () => {
const session = await getServerSession(authOptions) as SessionWithTokens;
return session?.abilities ?? []
return session?.abilities ?? [] as string[]
}

+ 3
- 2
src/components/NavigationContent/NavigationContent.tsx View File

@@ -38,6 +38,7 @@ import {
GENERATE_REPORTS,
MAINTAIN_MASTERDATA,
MAINTAIN_PROJECT,
MAINTAIN_TASK_TEMPLATE,
MAINTAIN_USER,
VIEW_MASTERDATA,
VIEW_PROJECT,
@@ -133,8 +134,8 @@ const NavigationContent: React.FC<Props> = ({ abilities }) => {
// },
// ],
// },
{ icon: <Assignment />, label: "Project Management", path: "/projects", isHidden: ![VIEW_PROJECT, MAINTAIN_PROJECT].some((ability) => abilities?.includes(ability)) },
{ icon: <Task />, label: "Task Template", path: "/tasks" },
{ icon: <Assignment />, label: "Project Management", path: "/projects", isHidden: ![MAINTAIN_PROJECT].some((ability) => abilities?.includes(ability)) },
{ icon: <Task />, label: "Task Template", path: "/tasks", isHidden: ![MAINTAIN_TASK_TEMPLATE].some((ability) => abilities?.includes(ability)) },
{ icon: <Payments />, label: "Invoice", path: "/invoice" },
{
icon: <Analytics />,


+ 9
- 0
src/middleware.ts View File

@@ -97,6 +97,15 @@ export default async function middleware(
return Boolean(token)
}
const abilities = (token!.abilities as ability[]).map((item: ability) => item.actionSubjectCombo);

if (req.nextUrl.pathname.startsWith('/projects')) {
isAuth = [MAINTAIN_PROJECT].some((ability) => abilities.includes(ability));
}

if (req.nextUrl.pathname.startsWith('/tasks')) {
isAuth = [MAINTAIN_TASK_TEMPLATE].some((ability) => abilities.includes(ability));
}

if (req.nextUrl.pathname.startsWith('/settings')) {
isAuth = [VIEW_MASTERDATA, MAINTAIN_MASTERDATA].some((ability) => abilities.includes(ability));
}


Loading…
Cancel
Save