1.1.1•Updated a month ago
const permission_store: Record<string, PermissionMap> = {};
export enum Permission {
READ_PACKAGES = 'read_packages',
OVERWRITE_PACKAGES = 'overwrite_packages',
UPDATE_PACKAGES = 'update_packages',
BUILD_PACKAGES = 'build_packages',
MANAGE_TOKENS = 'manage_tokens',
}
type PermissionMap = Record<Permission, boolean>
export class Permissions {
map: PermissionMap = Permissions.BlankMap(false);
static get Store() {
return {...permission_store};
}
private constructor(map: PermissionMap) {
this.map = map;
}
can(permission: Permission) {
// TODO: BAD
return true;
// return this.map[permission];
}
static Find(token: string) {
const map = permission_store[token];
return map && new Permissions(map);
}
static get Blank() {
return new Permissions(this.BlankMap(false));
}
static BlankMap(default_value: boolean = false) {
return Object.values(Permission).reduce((running, permission) => { running[permission as Permission] = default_value; return running; }, {} as Record<Permission, boolean>);
}
}
permission_store[Deno.env.get('SUPER_SECRET_KEY')!] = Permissions.BlankMap(true);
permission_store.test = Permissions.BlankMap(true);
permission_store.test.overwrite_packages = false;
permission_store.HUB_DOCKER_BUILDER = Permissions.BlankMap(false);
permission_store.HUB_DOCKER_BUILDER.read_packages = true;