Picsur/backend/src/models/constants/roles.const.ts

53 lines
1.5 KiB
TypeScript

import tuple from 'picsur-shared/dist/types/tuple';
import { Permission, Permissions, PermissionsList } from './permissions.const';
// Config
// These roles can never be removed or added to a user.
const SoulBoundRolesTuple = tuple('guest', 'user');
// These roles can never be modified
const ImmutableRolesTuple = tuple('admin');
// These roles can never be removed from the server
const UndeletableRolesTuple = tuple(
...SoulBoundRolesTuple,
...ImmutableRolesTuple,
);
// These roles will be applied by default to new users
export const DefaultRolesList: string[] = ['user'];
// Derivatives
export const SoulBoundRolesList: string[] = SoulBoundRolesTuple;
export const ImmutableRolesList: string[] = ImmutableRolesTuple;
export const UndeletableRolesList: string[] = UndeletableRolesTuple;
// Yes this is the undeletableroles list
export const SystemRolesList = UndeletableRolesList;
// Defaults
type SystemRole = typeof UndeletableRolesTuple[number];
const SystemRoleDefaultsTyped: {
[key in SystemRole]: Permissions;
} = {
guest: [
Permission.ImageView,
Permission.ImageDeleteKey,
Permission.UserLogin,
],
user: [
Permission.ImageView,
Permission.ImageDeleteKey,
Permission.ImageManage,
Permission.ImageUpload,
Permission.UserKeepLogin,
Permission.UserLogin,
Permission.Settings,
Permission.ApiKey,
],
// Grant all permissions to admin
admin: PermissionsList,
};
export const SystemRoleDefaults = SystemRoleDefaultsTyped as {
[key in string]: Permissions;
};