part of frontend permission guard

This commit is contained in:
rubikscraft
2022-03-12 23:09:46 +01:00
parent 7026c8cb67
commit ac72035f76
15 changed files with 117 additions and 52 deletions

View File

@@ -1,21 +1,18 @@
import tuple from '../types/tuple';
// Config
const PermissionsTuple = tuple(
'image-view',
'image-upload',
'user-login', // Ability to log in
'user-register', // Ability to register
'user-manage',
'user-view', // Ability to view user details and refresh token
'role-manage',
'syspref-manage',
);
export enum Permission {
ImageView = 'image-view',
ImageUpload = 'image-upload',
UserLogin = 'user-login', // Ability to log in
UserRegister = 'user-register', // Ability to register
UserManage = 'user-manage',
UserView = 'user-view', // Ability to view user details and refresh token
RoleManage = 'role-manage',
SysPrefManage = 'syspref-manage',
}
// Derivatives
export const PermissionsList: string[] = PermissionsTuple;
export const PermissionsList: Permission[] = Object.values(Permission);
export type Permission = typeof PermissionsTuple[number];
export type Permissions = Permission[];

View File

@@ -1,5 +1,5 @@
import tuple from '../types/tuple';
import { Permissions, PermissionsList } from './permissions';
import { Permission, Permissions, PermissionsList } from './permissions';
// Config
@@ -24,10 +24,15 @@ export type SystemRoles = SystemRole[];
export const SystemRoleDefaults: {
[key in SystemRole]: Permissions;
} = {
guest: ['image-view', 'user-login'],
user: ['image-view', 'user-view', 'user-login', 'image-upload'],
guest: [Permission.ImageView, Permission.UserLogin],
user: [
Permission.ImageView,
Permission.UserView,
Permission.UserLogin,
Permission.ImageUpload,
],
// Grant all permissions to admin
admin: PermissionsList as Permissions,
admin: PermissionsList,
};
// Normal roles types

View File

@@ -0,0 +1,10 @@
import { isArray, isEnum, isString } from 'class-validator';
import { Permissions, PermissionsList } from '../dto/permissions';
export function isPermissionsArray(value: any): value is Permissions {
if (!isArray(value)) return false;
if (!value.every((item: unknown) => isString(item))) return false;
if (!value.every((item: string) => isEnum(item, PermissionsList)))
return false;
return true;
}