mirror of
https://github.com/Unleash/unleash.git
synced 2025-07-26 13:48:33 +02:00
chore: rename access matrix to access overview (#9531)
https://linear.app/unleash/issue/2-3344/new-name-access-overview-instead-of-access-matrix Renames Access Matrix to Access Overview, both internally (code) and externally (UI).
This commit is contained in:
parent
dadda7b648
commit
0d0530b61c
@ -2,7 +2,7 @@ import { PageContent } from 'component/common/PageContent/PageContent';
|
|||||||
import { PageHeader } from 'component/common/PageHeader/PageHeader';
|
import { PageHeader } from 'component/common/PageHeader/PageHeader';
|
||||||
import { useRequiredPathParam } from 'hooks/useRequiredPathParam';
|
import { useRequiredPathParam } from 'hooks/useRequiredPathParam';
|
||||||
import useUserInfo from 'hooks/api/getters/useUserInfo/useUserInfo';
|
import useUserInfo from 'hooks/api/getters/useUserInfo/useUserInfo';
|
||||||
import { PermissionsTable } from './PermissionsTable';
|
import { AccessOverviewTable } from './AccessOverviewTable';
|
||||||
import { styled, useMediaQuery } from '@mui/material';
|
import { styled, useMediaQuery } from '@mui/material';
|
||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
import { useEnvironments } from 'hooks/api/getters/useEnvironments/useEnvironments';
|
import { useEnvironments } from 'hooks/api/getters/useEnvironments/useEnvironments';
|
||||||
@ -10,8 +10,8 @@ import { ConditionallyRender } from 'component/common/ConditionallyRender/Condit
|
|||||||
import theme from 'themes/theme';
|
import theme from 'themes/theme';
|
||||||
import { StringParam, useQueryParams } from 'use-query-params';
|
import { StringParam, useQueryParams } from 'use-query-params';
|
||||||
import useProjects from 'hooks/api/getters/useProjects/useProjects';
|
import useProjects from 'hooks/api/getters/useProjects/useProjects';
|
||||||
import { AccessMatrixSelect } from './AccessMatrixSelect';
|
import { AccessOverviewSelect } from './AccessOverviewSelect';
|
||||||
import { useUserAccessMatrix } from 'hooks/api/getters/useUserAccessMatrix/useUserAccessMatrix';
|
import { useUserAccessOverview } from 'hooks/api/getters/useUserAccessOverview/useUserAccessOverview';
|
||||||
|
|
||||||
const StyledActionsContainer = styled('div')(({ theme }) => ({
|
const StyledActionsContainer = styled('div')(({ theme }) => ({
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
@ -28,7 +28,7 @@ const StyledTitle = styled('h2')(({ theme }) => ({
|
|||||||
margin: theme.spacing(2, 0),
|
margin: theme.spacing(2, 0),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
export const AccessMatrix = () => {
|
export const AccessOverview = () => {
|
||||||
const id = useRequiredPathParam('id');
|
const id = useRequiredPathParam('id');
|
||||||
const [query, setQuery] = useQueryParams({
|
const [query, setQuery] = useQueryParams({
|
||||||
project: StringParam,
|
project: StringParam,
|
||||||
@ -45,7 +45,7 @@ export const AccessMatrix = () => {
|
|||||||
query.environment ?? undefined,
|
query.environment ?? undefined,
|
||||||
);
|
);
|
||||||
|
|
||||||
const { matrix, rootRole, projectRoles } = useUserAccessMatrix(
|
const { overview, rootRole, projectRoles } = useUserAccessOverview(
|
||||||
id,
|
id,
|
||||||
project,
|
project,
|
||||||
environment,
|
environment,
|
||||||
@ -63,14 +63,14 @@ export const AccessMatrix = () => {
|
|||||||
|
|
||||||
const AccessActions = (
|
const AccessActions = (
|
||||||
<StyledActionsContainer>
|
<StyledActionsContainer>
|
||||||
<AccessMatrixSelect
|
<AccessOverviewSelect
|
||||||
label='Project'
|
label='Project'
|
||||||
options={projects}
|
options={projects}
|
||||||
getOptionLabel={(option) => option?.name ?? ''}
|
getOptionLabel={(option) => option?.name ?? ''}
|
||||||
value={projects.find(({ id }) => id === project)}
|
value={projects.find(({ id }) => id === project)}
|
||||||
setValue={(value) => setProject(value?.id ?? '')}
|
setValue={(value) => setProject(value?.id ?? '')}
|
||||||
/>
|
/>
|
||||||
<AccessMatrixSelect
|
<AccessOverviewSelect
|
||||||
label='Environment'
|
label='Environment'
|
||||||
options={environments}
|
options={environments}
|
||||||
getOptionLabel={(option) =>
|
getOptionLabel={(option) =>
|
||||||
@ -89,7 +89,7 @@ export const AccessMatrix = () => {
|
|||||||
isLoading={loading}
|
isLoading={loading}
|
||||||
header={
|
header={
|
||||||
<PageHeader
|
<PageHeader
|
||||||
title={`Access for ${user.name ?? user.username}`}
|
title={`Access overview for ${user.name ?? user.username}`}
|
||||||
actions={
|
actions={
|
||||||
<ConditionallyRender
|
<ConditionallyRender
|
||||||
condition={!isSmallScreen}
|
condition={!isSmallScreen}
|
||||||
@ -107,16 +107,16 @@ export const AccessMatrix = () => {
|
|||||||
<StyledTitle>
|
<StyledTitle>
|
||||||
Root permissions for role {rootRole?.name}
|
Root permissions for role {rootRole?.name}
|
||||||
</StyledTitle>
|
</StyledTitle>
|
||||||
<PermissionsTable permissions={matrix?.root ?? []} />
|
<AccessOverviewTable permissions={overview?.root ?? []} />
|
||||||
<StyledTitle>
|
<StyledTitle>
|
||||||
Project permissions for project {project} with project roles [
|
Project permissions for project {project} with project roles [
|
||||||
{projectRoles?.map((role: any) => role.name).join(', ')}]
|
{projectRoles?.map((role: any) => role.name).join(', ')}]
|
||||||
</StyledTitle>
|
</StyledTitle>
|
||||||
<PermissionsTable permissions={matrix?.project ?? []} />
|
<AccessOverviewTable permissions={overview?.project ?? []} />
|
||||||
<StyledTitle>
|
<StyledTitle>
|
||||||
Environment permissions for environment {environment}
|
Environment permissions for environment {environment}
|
||||||
</StyledTitle>
|
</StyledTitle>
|
||||||
<PermissionsTable permissions={matrix?.environment ?? []} />
|
<AccessOverviewTable permissions={overview?.environment ?? []} />
|
||||||
</PageContent>
|
</PageContent>
|
||||||
);
|
);
|
||||||
};
|
};
|
@ -1,6 +1,6 @@
|
|||||||
import { Autocomplete, type AutocompleteProps, TextField } from '@mui/material';
|
import { Autocomplete, type AutocompleteProps, TextField } from '@mui/material';
|
||||||
|
|
||||||
interface IAccessMatrixSelectProps<T>
|
interface IAccessOverviewSelectProps<T>
|
||||||
extends Partial<AutocompleteProps<T, false, false, false>> {
|
extends Partial<AutocompleteProps<T, false, false, false>> {
|
||||||
label: string;
|
label: string;
|
||||||
options: T[];
|
options: T[];
|
||||||
@ -8,13 +8,13 @@ interface IAccessMatrixSelectProps<T>
|
|||||||
setValue: (role: T | null) => void;
|
setValue: (role: T | null) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const AccessMatrixSelect = <T,>({
|
export const AccessOverviewSelect = <T,>({
|
||||||
label,
|
label,
|
||||||
options,
|
options,
|
||||||
value,
|
value,
|
||||||
setValue,
|
setValue,
|
||||||
...rest
|
...rest
|
||||||
}: IAccessMatrixSelectProps<T>) => (
|
}: IAccessOverviewSelectProps<T>) => (
|
||||||
<Autocomplete
|
<Autocomplete
|
||||||
options={options}
|
options={options}
|
||||||
value={value}
|
value={value}
|
@ -7,12 +7,12 @@ import { IconCell } from 'component/common/Table/cells/IconCell/IconCell';
|
|||||||
import Check from '@mui/icons-material/Check';
|
import Check from '@mui/icons-material/Check';
|
||||||
import Close from '@mui/icons-material/Close';
|
import Close from '@mui/icons-material/Close';
|
||||||
import { Box } from '@mui/material';
|
import { Box } from '@mui/material';
|
||||||
import type { IMatrixPermission } from 'interfaces/permissions';
|
import type { IAccessOverviewPermission } from 'interfaces/permissions';
|
||||||
|
|
||||||
export const PermissionsTable = ({
|
export const AccessOverviewTable = ({
|
||||||
permissions,
|
permissions,
|
||||||
}: {
|
}: {
|
||||||
permissions: IMatrixPermission[];
|
permissions: IAccessOverviewPermission[];
|
||||||
}) => {
|
}) => {
|
||||||
const columns = useMemo(
|
const columns = useMemo(
|
||||||
() => [
|
() => [
|
@ -5,7 +5,7 @@ import { Route, Routes } from 'react-router-dom';
|
|||||||
import EditUser from './EditUser/EditUser';
|
import EditUser from './EditUser/EditUser';
|
||||||
import NotFound from 'component/common/NotFound/NotFound';
|
import NotFound from 'component/common/NotFound/NotFound';
|
||||||
import { InactiveUsersList } from './InactiveUsersList/InactiveUsersList';
|
import { InactiveUsersList } from './InactiveUsersList/InactiveUsersList';
|
||||||
import { AccessMatrix } from './AccessMatrix/AccessMatrix';
|
import { AccessOverview } from './AccessOverview/AccessOverview';
|
||||||
import { PremiumFeature } from '../../common/PremiumFeature/PremiumFeature';
|
import { PremiumFeature } from '../../common/PremiumFeature/PremiumFeature';
|
||||||
import { ConditionallyRender } from '../../common/ConditionallyRender/ConditionallyRender';
|
import { ConditionallyRender } from '../../common/ConditionallyRender/ConditionallyRender';
|
||||||
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
|
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
|
||||||
@ -25,7 +25,7 @@ export const UsersAdmin = () => {
|
|||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Route path=':id/edit' element={<EditUser />} />
|
<Route path=':id/edit' element={<EditUser />} />
|
||||||
<Route path=':id/access' element={<AccessMatrix />} />
|
<Route path=':id/access' element={<AccessOverview />} />
|
||||||
<Route
|
<Route
|
||||||
path='inactive'
|
path='inactive'
|
||||||
element={
|
element={
|
||||||
|
@ -4,7 +4,7 @@ import { useRequiredPathParam } from 'hooks/useRequiredPathParam';
|
|||||||
import type { ActionsActionState } from '../../useProjectActionsForm';
|
import type { ActionsActionState } from '../../useProjectActionsForm';
|
||||||
import { ProjectActionsFormItem } from '../ProjectActionsFormItem';
|
import { ProjectActionsFormItem } from '../ProjectActionsFormItem';
|
||||||
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
|
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
|
||||||
import { useServiceAccountAccessMatrix } from 'hooks/api/getters/useServiceAccountAccessMatrix/useServiceAccountAccessMatrix';
|
import { useServiceAccountAccessOverview } from 'hooks/api/getters/useServiceAccountAccessOverview/useServiceAccountAccessOverview';
|
||||||
import { useEffect, useMemo } from 'react';
|
import { useEffect, useMemo } from 'react';
|
||||||
import { ProjectActionsActionParameter } from './ProjectActionsActionParameter/ProjectActionsActionParameter';
|
import { ProjectActionsActionParameter } from './ProjectActionsActionParameter/ProjectActionsActionParameter';
|
||||||
import type { ActionConfigurations } from 'interfaces/action';
|
import type { ActionConfigurations } from 'interfaces/action';
|
||||||
@ -51,7 +51,7 @@ export const ProjectActionsActionItem = ({
|
|||||||
}: IProjectActionsItemProps) => {
|
}: IProjectActionsItemProps) => {
|
||||||
const { action: actionName, executionParams, error } = action;
|
const { action: actionName, executionParams, error } = action;
|
||||||
const projectId = useRequiredPathParam('projectId');
|
const projectId = useRequiredPathParam('projectId');
|
||||||
const { permissions } = useServiceAccountAccessMatrix(
|
const { permissions } = useServiceAccountAccessOverview(
|
||||||
actorId,
|
actorId,
|
||||||
projectId,
|
projectId,
|
||||||
executionParams.environment as string,
|
executionParams.environment as string,
|
||||||
|
@ -3,49 +3,49 @@ import { formatApiPath } from 'utils/formatPath';
|
|||||||
import handleErrorResponses from '../httpErrorResponseHandler';
|
import handleErrorResponses from '../httpErrorResponseHandler';
|
||||||
import type { IRole } from 'interfaces/role';
|
import type { IRole } from 'interfaces/role';
|
||||||
import type { IServiceAccount } from 'interfaces/service-account';
|
import type { IServiceAccount } from 'interfaces/service-account';
|
||||||
import type { IMatrixPermission } from 'interfaces/permissions';
|
import type { IAccessOverviewPermission } from 'interfaces/permissions';
|
||||||
import type { IPermission } from 'interfaces/user';
|
import type { IPermission } from 'interfaces/user';
|
||||||
import { useConditionalSWR } from '../useConditionalSWR/useConditionalSWR';
|
import { useConditionalSWR } from '../useConditionalSWR/useConditionalSWR';
|
||||||
|
|
||||||
interface IServiceAccountAccessMatrix {
|
interface IServiceAccountAccessOverview {
|
||||||
root: IMatrixPermission[];
|
root: IAccessOverviewPermission[];
|
||||||
project: IMatrixPermission[];
|
project: IAccessOverviewPermission[];
|
||||||
environment: IMatrixPermission[];
|
environment: IAccessOverviewPermission[];
|
||||||
}
|
}
|
||||||
|
|
||||||
interface IServiceAccountAccessMatrixResponse {
|
interface IServiceAccountAccessOverviewResponse {
|
||||||
matrix: IServiceAccountAccessMatrix;
|
overview: IServiceAccountAccessOverview;
|
||||||
projectRoles: IRole[];
|
projectRoles: IRole[];
|
||||||
rootRole: IRole;
|
rootRole: IRole;
|
||||||
serviceAccount: IServiceAccount;
|
serviceAccount: IServiceAccount;
|
||||||
permissions: IPermission[];
|
permissions: IPermission[];
|
||||||
}
|
}
|
||||||
|
|
||||||
interface IServiceAccountAccessMatrixOutput
|
interface IServiceAccountAccessOverviewOutput
|
||||||
extends Partial<IServiceAccountAccessMatrixResponse> {
|
extends Partial<IServiceAccountAccessOverviewResponse> {
|
||||||
permissions: IPermission[];
|
permissions: IPermission[];
|
||||||
loading: boolean;
|
loading: boolean;
|
||||||
refetch: () => void;
|
refetch: () => void;
|
||||||
error?: Error;
|
error?: Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const useServiceAccountAccessMatrix = (
|
export const useServiceAccountAccessOverview = (
|
||||||
id?: number,
|
id?: number,
|
||||||
project?: string,
|
project?: string,
|
||||||
environment?: string,
|
environment?: string,
|
||||||
): IServiceAccountAccessMatrixOutput => {
|
): IServiceAccountAccessOverviewOutput => {
|
||||||
const queryParams = `${project ? `?project=${project}` : ''}${
|
const queryParams = `${project ? `?project=${project}` : ''}${
|
||||||
environment ? `${project ? '&' : '?'}environment=${environment}` : ''
|
environment ? `${project ? '&' : '?'}environment=${environment}` : ''
|
||||||
}`;
|
}`;
|
||||||
const url = `api/admin/service-account/${id}/permissions${queryParams}`;
|
const url = `api/admin/service-account/${id}/permissions${queryParams}`;
|
||||||
|
|
||||||
const { data, error, mutate } = useConditionalSWR<
|
const { data, error, mutate } = useConditionalSWR<
|
||||||
IServiceAccountAccessMatrixResponse | undefined
|
IServiceAccountAccessOverviewResponse | undefined
|
||||||
>(Boolean(id), undefined, formatApiPath(url), fetcher);
|
>(Boolean(id), undefined, formatApiPath(url), fetcher);
|
||||||
|
|
||||||
return useMemo(
|
return useMemo(
|
||||||
() => ({
|
() => ({
|
||||||
matrix: data?.matrix,
|
overview: data?.overview,
|
||||||
projectRoles: data?.projectRoles,
|
projectRoles: data?.projectRoles,
|
||||||
rootRole: data?.rootRole,
|
rootRole: data?.rootRole,
|
||||||
serviceAccount: data?.serviceAccount,
|
serviceAccount: data?.serviceAccount,
|
||||||
@ -60,6 +60,6 @@ export const useServiceAccountAccessMatrix = (
|
|||||||
|
|
||||||
const fetcher = (path: string) => {
|
const fetcher = (path: string) => {
|
||||||
return fetch(path)
|
return fetch(path)
|
||||||
.then(handleErrorResponses('Service account access matrix'))
|
.then(handleErrorResponses('Service account access overview'))
|
||||||
.then((res) => res.json());
|
.then((res) => res.json());
|
||||||
};
|
};
|
@ -4,45 +4,46 @@ import handleErrorResponses from '../httpErrorResponseHandler';
|
|||||||
import useSWR from 'swr';
|
import useSWR from 'swr';
|
||||||
import type { IRole } from 'interfaces/role';
|
import type { IRole } from 'interfaces/role';
|
||||||
import type { IUser } from 'interfaces/user';
|
import type { IUser } from 'interfaces/user';
|
||||||
import type { IMatrixPermission } from 'interfaces/permissions';
|
import type { IAccessOverviewPermission } from 'interfaces/permissions';
|
||||||
|
|
||||||
interface IUserAccessMatrix {
|
interface IUserAccessOverview {
|
||||||
root: IMatrixPermission[];
|
root: IAccessOverviewPermission[];
|
||||||
project: IMatrixPermission[];
|
project: IAccessOverviewPermission[];
|
||||||
environment: IMatrixPermission[];
|
environment: IAccessOverviewPermission[];
|
||||||
}
|
}
|
||||||
|
|
||||||
interface IUserAccessMatrixResponse {
|
interface IUserAccessOverviewResponse {
|
||||||
matrix: IUserAccessMatrix;
|
overview: IUserAccessOverview;
|
||||||
projectRoles: IRole[];
|
projectRoles: IRole[];
|
||||||
rootRole: IRole;
|
rootRole: IRole;
|
||||||
user: IUser;
|
user: IUser;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface IUserAccessMatrixOutput extends Partial<IUserAccessMatrixResponse> {
|
interface IUserAccessOverviewOutput
|
||||||
|
extends Partial<IUserAccessOverviewResponse> {
|
||||||
loading: boolean;
|
loading: boolean;
|
||||||
refetch: () => void;
|
refetch: () => void;
|
||||||
error?: Error;
|
error?: Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const useUserAccessMatrix = (
|
export const useUserAccessOverview = (
|
||||||
id: string,
|
id: string,
|
||||||
project?: string,
|
project?: string,
|
||||||
environment?: string,
|
environment?: string,
|
||||||
): IUserAccessMatrixOutput => {
|
): IUserAccessOverviewOutput => {
|
||||||
const queryParams = `${project ? `?project=${project}` : ''}${
|
const queryParams = `${project ? `?project=${project}` : ''}${
|
||||||
environment ? `${project ? '&' : '?'}environment=${environment}` : ''
|
environment ? `${project ? '&' : '?'}environment=${environment}` : ''
|
||||||
}`;
|
}`;
|
||||||
const url = `api/admin/user-admin/${id}/permissions${queryParams}`;
|
const url = `api/admin/user-admin/${id}/permissions${queryParams}`;
|
||||||
|
|
||||||
const { data, error, mutate } = useSWR<IUserAccessMatrixResponse>(
|
const { data, error, mutate } = useSWR<IUserAccessOverviewResponse>(
|
||||||
formatApiPath(url),
|
formatApiPath(url),
|
||||||
fetcher,
|
fetcher,
|
||||||
);
|
);
|
||||||
|
|
||||||
return useMemo(
|
return useMemo(
|
||||||
() => ({
|
() => ({
|
||||||
matrix: data?.matrix,
|
overview: data?.overview,
|
||||||
projectRoles: data?.projectRoles,
|
projectRoles: data?.projectRoles,
|
||||||
rootRole: data?.rootRole,
|
rootRole: data?.rootRole,
|
||||||
user: data?.user,
|
user: data?.user,
|
@ -37,6 +37,6 @@ export interface IPermissionCategory {
|
|||||||
permissions: IPermission[];
|
permissions: IPermission[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IMatrixPermission extends IPermission {
|
export interface IAccessOverviewPermission extends IPermission {
|
||||||
hasPermission: boolean;
|
hasPermission: boolean;
|
||||||
}
|
}
|
||||||
|
@ -741,7 +741,7 @@ export default class UserAdminController extends Controller {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
const matrix = await this.accessService.permissionsMatrixForUser(
|
const overview = await this.accessService.getAccessOverviewForUser(
|
||||||
user,
|
user,
|
||||||
project,
|
project,
|
||||||
environment,
|
environment,
|
||||||
@ -749,7 +749,7 @@ export default class UserAdminController extends Controller {
|
|||||||
|
|
||||||
// TODO add response validation based on the schema
|
// TODO add response validation based on the schema
|
||||||
res.status(200).json({
|
res.status(200).json({
|
||||||
matrix,
|
overview,
|
||||||
user,
|
user,
|
||||||
rootRole,
|
rootRole,
|
||||||
projectRoles,
|
projectRoles,
|
||||||
|
@ -63,13 +63,13 @@ const PROJECT_ADMIN = [
|
|||||||
export type IdPermissionRef = Pick<IPermission, 'id' | 'environment'>;
|
export type IdPermissionRef = Pick<IPermission, 'id' | 'environment'>;
|
||||||
export type NamePermissionRef = Pick<IPermission, 'name' | 'environment'>;
|
export type NamePermissionRef = Pick<IPermission, 'name' | 'environment'>;
|
||||||
export type PermissionRef = IdPermissionRef | NamePermissionRef;
|
export type PermissionRef = IdPermissionRef | NamePermissionRef;
|
||||||
type MatrixPermission = IPermission & {
|
type AccessOverviewPermission = IPermission & {
|
||||||
hasPermission: boolean;
|
hasPermission: boolean;
|
||||||
};
|
};
|
||||||
type PermissionMatrix = {
|
type AccessOverview = {
|
||||||
root: MatrixPermission[];
|
root: AccessOverviewPermission[];
|
||||||
project: MatrixPermission[];
|
project: AccessOverviewPermission[];
|
||||||
environment: MatrixPermission[];
|
environment: AccessOverviewPermission[];
|
||||||
};
|
};
|
||||||
|
|
||||||
type APIUser = Pick<IUser, 'id' | 'permissions'> & { isAPI: true };
|
type APIUser = Pick<IUser, 'id' | 'permissions'> & { isAPI: true };
|
||||||
@ -244,14 +244,14 @@ export class AccessService {
|
|||||||
* Provided a project, project permissions will be checked against that project.
|
* Provided a project, project permissions will be checked against that project.
|
||||||
* Provided an environment, environment permissions will be checked against that environment (and project).
|
* Provided an environment, environment permissions will be checked against that environment (and project).
|
||||||
*/
|
*/
|
||||||
async permissionsMatrixForUser(
|
async getAccessOverviewForUser(
|
||||||
user: APIUser | NonAPIUser,
|
user: APIUser | NonAPIUser,
|
||||||
projectId?: string,
|
projectId?: string,
|
||||||
environment?: string,
|
environment?: string,
|
||||||
): Promise<PermissionMatrix> {
|
): Promise<AccessOverview> {
|
||||||
const permissions = await this.getPermissions();
|
const permissions = await this.getPermissions();
|
||||||
const userP = await this.getPermissionsForUser(user);
|
const userP = await this.getPermissionsForUser(user);
|
||||||
const matrix: PermissionMatrix = {
|
const overview: AccessOverview = {
|
||||||
root: permissions.root.map((p) => ({
|
root: permissions.root.map((p) => ({
|
||||||
...p,
|
...p,
|
||||||
hasPermission: this.meetsAllPermissions(userP, [p.name]),
|
hasPermission: this.meetsAllPermissions(userP, [p.name]),
|
||||||
@ -278,7 +278,7 @@ export class AccessService {
|
|||||||
})) ?? [],
|
})) ?? [],
|
||||||
};
|
};
|
||||||
|
|
||||||
return matrix;
|
return overview;
|
||||||
}
|
}
|
||||||
|
|
||||||
async getPermissionsForUser(
|
async getPermissionsForUser(
|
||||||
|
Loading…
Reference in New Issue
Block a user