/
AbleObject.ts
42 lines (40 loc) · 946 Bytes
/
AbleObject.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import { Entity } from '@nymphjs/nymph';
/**
* AbleObject abstract class.
*
* Used in entities which support abilities, such as users and groups.
*/
export default abstract class AbleObject<
T extends { abilities?: string[] }
> extends Entity<T> {
/**
* Grant an ability.
*
* @param ability The ability.
*/
public $grant(ability: string) {
if (!Array.isArray(this.$data.abilities)) {
this.$data.abilities = [];
}
if (this.$data.abilities.indexOf(ability) === -1) {
this.$data.abilities.push(ability);
}
}
/**
* Revoke an ability.
*
* @param ability The ability.
*/
public $revoke(ability: string) {
if (!Array.isArray(this.$data.abilities)) {
this.$data.abilities = [];
}
let idx: number;
do {
idx = this.$data.abilities.indexOf(ability);
if (idx !== -1) {
this.$data.abilities.splice(idx, 1);
}
} while (idx !== -1);
}
}