0.1.3Updated 10 days ago
export interface User extends Draco.User {}
export class User {
  constructor(params: Draco.User) {
    this.id = params.id;
    this.name = params.name;
    this.surname = params.surname;
    this.email = params.email;
    this.permissions = params.permissions;
    this.image_path = params.image_path;
  }

  get is_super_admin() {
    return this.permissions.includes('*') || false;
  }

  can(permission: string) {
    if(!this) return false;
    if(this.is_super_admin) return true;

    return this.permissions.includes(permission);
  }

  has_permission(permission: string) {
    if(!this) return false;
    if(this.is_super_admin) return true;

    return this.permissions.includes(permission);
  }

  has_one_permission_of(...permissions: string[]) {
    if(!this) return false;
    if(this.is_super_admin) return true;

    return permissions.some(permission => this!.permissions.includes(permission));
  }

  has_all_permission_of(...permissions: string[]) {
    if(!this) return false;
    if(this.is_super_admin) return true;
    
    return permissions.every(permission => this!.permissions.includes(permission));
  }
}