Define models

Simple permission

export class MyObjectOnePermissions extends AbstractPermissionModel {
  @Perm(1)
  static readonly READ: Permission;

  @Perm(2)
  static readonly CREATE: Permission;

  @Perm(3)
  static readonly UPDATE: Permission;

  @Perm(4)
  static readonly DELETE: Permission;
}

You can add a mixed permission

AND mixed permission

export class MyObjectOnePermissions extends AbstractPermissionModel {
  ...
  ...
  ...
  
  @MixedPerm(
    [MyObjectOnePermissions.READ],
    [MyObjectOnePermissions.CREATE],
    [MyObjectOnePermissions.UPDATE],
    [MyObjectOnePermissions.DELETE],
  )
  static readonly ADMIN: MixedPermission; // READ && CREATE && UPDATE && DELETE
}

OR mixed permission

export class MyObjectOnePermissions extends AbstractPermissionModel {
  ...
  ...
  ...
  
  @MixedPerm(
    [MyObjectOnePermissions.READ,
    MyObjectOnePermissions.CREATE,
    MyObjectOnePermissions.UPDATE,
    MyObjectOnePermissions.DELETE],
  )
  static readonly USER: MixedPermission; // READ || CREATE || UPDATE || DELETE
}

Mixed AND and OR permission

export class MyObjectOnePermissions extends AbstractPermissionModel {
  ...
  ...
  ...
  
  @MixedPerm(
    [MyObjectOnePermissions.READ,
    MyObjectOnePermissions.CREATE],
    [MyObjectOnePermissions.UPDATE,
    MyObjectOnePermissions.DELETE],
  )
  static readonly SUB_ADMIN: MixedPermission; // (READ || CREATE) && (UPDATE || DELETE)
}

You can use mixed permission in mixed permission

export class MyObjectOnePermissions extends AbstractPermissionModel {
  ...
  ...
  ...
  
  @MixedPerm(
    [MyObjectOnePermissions.READ],
    [MyObjectOnePermissions.CREATE],
    [MyObjectOnePermissions.UPDATE],
    [MyObjectOnePermissions.DELETE],
  )
  static readonly ADMIN: MixedPermission; // READ && CREATE && UPDATE && DELETE
}

export class MyObjectTwoPermissions extends AbstractPermissionModel {
  ...
  ...
  ...
  
  @MixedPerm(
    [MyObjectOnePermissions.READ],
    [MyObjectOnePermissions.CREATE],
    [MyObjectOnePermissions.UPDATE],
    [MyObjectOnePermissions.DELETE],
  )
  static readonly ADMIN: MixedPermission; // READ && CREATE && UPDATE && DELETE
}

export class MyGeneralPermissions extends AbstractPermissionModel {
  ...
  ...
  ...
  
  @MixedPerm(
    [MyObjectOnePermissions.ADMIN],
    [MyObjectTwoPermissions.ADMIN],
  )
  static readonly ADMIN: MixedPermission; // READ && CREATE && UPDATE && DELETE
}

Last updated