mirror of
https://github.com/CaramelFur/Picsur.git
synced 2026-05-07 14:36:22 +02:00
part of frontend permission guard
This commit is contained in:
@@ -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[];
|
||||
|
||||
@@ -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
|
||||
|
||||
10
shared/src/util/permissions.ts
Normal file
10
shared/src/util/permissions.ts
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user