Permission System (#47)

* feat(api): permissions system

Adds a permission system for isAuthenticated middleware. Also adds user CRUD.
This commit is contained in:
sct
2020-09-03 19:20:14 +09:00
committed by GitHub
parent 5d46f8d76d
commit cfc84ce2f3
8 changed files with 240 additions and 20 deletions

View File

@@ -5,6 +5,7 @@ import {
CreateDateColumn,
UpdateDateColumn,
} from 'typeorm';
import { Permission, hasPermission } from '../lib/permissions';
@Entity()
export class User {
@@ -12,6 +13,8 @@ export class User {
return users.map((u) => u.filter());
}
static readonly filteredFields: string[] = ['plexToken'];
@PrimaryGeneratedColumn()
public id: number;
@@ -21,6 +24,9 @@ export class User {
@Column({ nullable: true })
public plexToken?: string;
@Column({ type: 'integer', default: 0 })
public permissions = 0;
@CreateDateColumn()
public createdAt: Date;
@@ -32,11 +38,17 @@ export class User {
}
public filter(): Partial<User> {
return {
id: this.id,
email: this.email,
createdAt: this.createdAt,
updatedAt: this.updatedAt,
};
const filtered: Partial<User> = Object.assign(
{},
...(Object.keys(this) as (keyof User)[])
.filter((k) => !User.filteredFields.includes(k))
.map((k) => ({ [k]: this[k] }))
);
return filtered;
}
public hasPermission(permissions: Permission | Permission[]): boolean {
return !!hasPermission(permissions, this.permissions);
}
}