Skip to content

Commit

Permalink
Merge pull request #96 from terrestris/add-permission-service
Browse files Browse the repository at this point in the history
Add `PermissionService`
  • Loading branch information
dnlkoch committed Aug 9, 2022
2 parents e2910b2 + f6d3c67 commit 194a7c4
Show file tree
Hide file tree
Showing 13 changed files with 1,409 additions and 4 deletions.
4 changes: 2 additions & 2 deletions src/model/Group.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ export interface KeycloakGroupRepresentation extends ProviderGroupDetails {
};
}

export interface GroupArgs<T extends ProviderGroupDetails> extends BaseEntityArgs {
export interface GroupArgs<T extends ProviderGroupDetails = KeycloakGroupRepresentation> extends BaseEntityArgs {
authProviderId?: string;
providerDetails?: T;
}

export default class Group<T extends ProviderGroupDetails> extends BaseEntity {
export default class Group<T extends ProviderGroupDetails = KeycloakGroupRepresentation> extends BaseEntity {
authProviderId?: string;
providerDetails?: T;

Expand Down
5 changes: 5 additions & 0 deletions src/model/enum/PermissionCollectionType.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export type PermissionCollectionType = 'CREATE' | 'READ' | 'UPDATE' | 'DELETE' | 'CREATE_READ' | 'CREATE_UPDATE' |
'CREATE_DELETE' | 'READ_UPDATE' | 'READ_DELETE' | 'UPDATE_DELETE' | 'CREATE_READ_UPDATE' | 'CREATE_READ_DELETE' |
'CREATE_UPDATE_DELETE' | 'READ_UPDATE_DELETE' | 'ADMIN';

export default PermissionCollectionType;
3 changes: 3 additions & 0 deletions src/model/enum/PermissionType.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export type PermissionType = 'ADMIN' | 'CREATE' | 'DELETE' | 'UPDATE' | 'READ';

export default PermissionType;
19 changes: 19 additions & 0 deletions src/model/security/ClassPermission.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import BaseEntity, { BaseEntityArgs } from '../BaseEntity';
import PermissionCollection from './PermissionCollection';

export interface ClassPermissionArgs extends BaseEntityArgs {
className: string;
permission: PermissionCollection;
}

export default class ClassPermission extends BaseEntity {
className: string;
permission: PermissionCollection;

constructor({ id, created, modified, className, permission }: ClassPermissionArgs) {
super({ id, created, modified });

this.className = className;
this.permission = permission;
}
}
16 changes: 16 additions & 0 deletions src/model/security/GroupClassPermission.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import Group from '../Group';
import ClassPermission, { ClassPermissionArgs } from './ClassPermission';

export interface GroupClassPermissionArgs extends ClassPermissionArgs {
group: Group;
}

export default class GroupClassPermission extends ClassPermission {
group: Group;

constructor({ id, created, modified, className, permission, group }: GroupClassPermissionArgs) {
super({ id, created, modified, className, permission });

this.group = group;
}
}
16 changes: 16 additions & 0 deletions src/model/security/GroupInstancePermission.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import Group from '../Group';
import InstancePermission, { InstancePermissionArgs } from './InstancePermission';

export interface GroupInstancePermissionArgs extends InstancePermissionArgs {
group: Group;
}

export default class GroupInstancePermission extends InstancePermission {
group: Group;

constructor({ id, created, modified, entityId, permission, group }: GroupInstancePermissionArgs) {
super({ id, created, modified, entityId, permission });

this.group = group;
}
}
19 changes: 19 additions & 0 deletions src/model/security/InstancePermission.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import BaseEntity, { BaseEntityArgs } from '../BaseEntity';
import PermissionCollection from './PermissionCollection';

export interface InstancePermissionArgs extends BaseEntityArgs {
entityId: number;
permission: PermissionCollection;
}

export default class InstancePermission extends BaseEntity {
entityId: number;
permission: PermissionCollection;

constructor({ id, created, modified, entityId, permission }: InstancePermissionArgs) {
super({ id, created, modified });

this.entityId = entityId;
this.permission = permission;
}
}
20 changes: 20 additions & 0 deletions src/model/security/PermissionCollection.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import BaseEntity, { BaseEntityArgs } from '../BaseEntity';
import PermissionCollectionType from '../enum/PermissionCollectionType';
import PermissionType from '../enum/PermissionType';

export interface PermissionCollectionArgs extends BaseEntityArgs {
permissions: PermissionType[];
name: PermissionCollectionType;
}

export default class PermissionCollection extends BaseEntity {
permissions: PermissionType[];
name: PermissionCollectionType;

constructor({ id, created, modified, permissions, name }: PermissionCollectionArgs) {
super({ id, created, modified });

this.permissions = permissions;
this.name = name;
}
}
16 changes: 16 additions & 0 deletions src/model/security/UserClassPermission.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import User from '../User';
import ClassPermission, { ClassPermissionArgs } from './ClassPermission';

export interface UserClassPermissionArgs extends ClassPermissionArgs {
user: User;
}

export default class UserClassPermission extends ClassPermission {
user: User;

constructor({ id, created, modified, className, permission, user }: UserClassPermissionArgs) {
super({ id, created, modified, className, permission });

this.user = user;
}
}
16 changes: 16 additions & 0 deletions src/model/security/UserInstancePermission.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import User from '../User';
import InstancePermission, { InstancePermissionArgs } from './InstancePermission';

export interface UserInstancePermissionArgs extends InstancePermissionArgs {
user: User;
}

export default class UserInstancePermission extends InstancePermission {
user: User;

constructor({ id, created, modified, entityId, permission, user }: UserInstancePermissionArgs) {
super({ id, created, modified, entityId, permission });

this.user = user;
}
}
10 changes: 8 additions & 2 deletions src/service/GenericService/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,25 @@ import { getBearerTokenHeader } from '../../security/getBearerTokenHeader';
import { getCsrfTokenHeader } from '../../security/getCsrfTokenHeader';

import BaseEntity from '../../model/BaseEntity';
import PermissionService from '../PermissionService';

export interface GenericServiceOpts {
basePath: string;
keycloak?: Keycloak;
};

export abstract class GenericService<T extends BaseEntity> {
export abstract class GenericService<T extends BaseEntity> extends PermissionService {

basePath: string;

keycloak?: Keycloak;

constructor(opts: GenericServiceOpts) {
super({
basePath: opts.basePath,
keycloak: opts.keycloak
});

this.basePath = opts.basePath;
this.keycloak = opts.keycloak;
}
Expand All @@ -37,7 +43,7 @@ export abstract class GenericService<T extends BaseEntity> {

const json: T[] = await response.json();

return json ;
return json;
} catch (error) {
throw new Error(`Error while requesting all entities: ${error}`);
}
Expand Down
Loading

0 comments on commit 194a7c4

Please sign in to comment.