@js-sugar/angular
Version:
JS-Sugar core package (Angular)
33 lines • 5.95 kB
JavaScript
export class User {
constructor(permissions) {
this._permissions = new Array();
if (Array.isArray(permissions)) {
this._permissions = [...permissions];
}
}
get permissions() {
return [...this._permissions];
}
hasAllPermissions(permissions) {
return permissions.every(x => this._permissions.some(y => x === y));
}
hasAnyPermission(permissions) {
return permissions.length == 0 || permissions.some(x => this._permissions.some(y => x === y));
}
hasPermission(criteria) {
if (typeof criteria === 'string') {
return this._permissions.some(x => x === criteria);
}
if (typeof criteria === 'object' && criteria?.any && criteria?.all) {
throw Error('Setting "any" and "all" at the same time is not valid.');
}
if (Array.isArray(criteria?.any)) {
return this.hasAnyPermission(criteria.any);
}
if (Array.isArray(criteria?.all)) {
return this.hasAllPermissions(criteria.all);
}
throw Error('Invalid criteria');
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL2xpYi9zZWN1cml0eS91c2VyL3VzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxPQUFPLElBQUk7SUFPYixZQUFZLFdBQStCO1FBTjFCLGlCQUFZLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztRQU9oRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUM7U0FDeEM7SUFDTCxDQUFDO0lBUkQsSUFBSSxXQUFXO1FBQ1gsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFTTSxpQkFBaUIsQ0FBQyxXQUE4QjtRQUNuRCxPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFHTSxnQkFBZ0IsQ0FBQyxXQUE4QjtRQUNsRCxPQUFPLFdBQVcsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFTSxhQUFhLENBQUMsUUFBNEI7UUFDN0MsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUU7WUFDOUIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQztTQUN0RDtRQUVELElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLFFBQVEsRUFBRSxHQUFHLElBQUksUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUNoRSxNQUFNLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO1NBQ3pFO1FBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUM5QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDOUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMvQztRQUVELE1BQU0sS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDcEMsQ0FBQztDQWtCSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBlcm1pc3Npb25Dcml0ZXJpYSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbi8qKiBVc2VyIElkZW50aXR5IChJbW11dGFibGUpICovXHJcbmV4cG9ydCBjbGFzcyBVc2VyIHtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Blcm1pc3Npb25zID0gbmV3IEFycmF5PHN0cmluZz4oKTtcclxuXHJcbiAgICBnZXQgcGVybWlzc2lvbnMoKTogcmVhZG9ubHkgc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiBbLi4udGhpcy5fcGVybWlzc2lvbnNdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHBlcm1pc3Npb25zPzogcmVhZG9ubHkgc3RyaW5nW10pIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwZXJtaXNzaW9ucykpIHtcclxuICAgICAgICAgICAgdGhpcy5fcGVybWlzc2lvbnMgPSBbLi4ucGVybWlzc2lvbnNdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogaGFzQWxsUGVybWlzc2lvbnMgKi9cclxuICAgIHB1YmxpYyBoYXNBbGxQZXJtaXNzaW9ucyhwZXJtaXNzaW9uczogcmVhZG9ubHkgc3RyaW5nW10pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcGVybWlzc2lvbnMuZXZlcnkoeCA9PiB0aGlzLl9wZXJtaXNzaW9ucy5zb21lKHkgPT4geCA9PT0geSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBoYXNBbnlQZXJtaXNzaW9uICovXHJcbiAgICBwdWJsaWMgaGFzQW55UGVybWlzc2lvbihwZXJtaXNzaW9uczogcmVhZG9ubHkgc3RyaW5nW10pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcGVybWlzc2lvbnMubGVuZ3RoID09IDAgfHwgcGVybWlzc2lvbnMuc29tZSh4ID0+IHRoaXMuX3Blcm1pc3Npb25zLnNvbWUoeSA9PiB4ID09PSB5KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhc1Blcm1pc3Npb24oY3JpdGVyaWE6IFBlcm1pc3Npb25Dcml0ZXJpYSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0eXBlb2YgY3JpdGVyaWEgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wZXJtaXNzaW9ucy5zb21lKHggPT4geCA9PT0gY3JpdGVyaWEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBjcml0ZXJpYSA9PT0gJ29iamVjdCcgJiYgY3JpdGVyaWE/LmFueSAmJiBjcml0ZXJpYT8uYWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdTZXR0aW5nIFwiYW55XCIgYW5kIFwiYWxsXCIgYXQgdGhlIHNhbWUgdGltZSBpcyBub3QgdmFsaWQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNyaXRlcmlhPy5hbnkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhc0FueVBlcm1pc3Npb24oY3JpdGVyaWEuYW55KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY3JpdGVyaWE/LmFsbCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzQWxsUGVybWlzc2lvbnMoY3JpdGVyaWEuYWxsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRocm93IEVycm9yKCdJbnZhbGlkIGNyaXRlcmlhJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLyoqIHRvSnNvbiAqL1xyXG4gICAgLy8gcHVibGljIHRvSnNvbigpIHtcclxuICAgIC8vICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoeyBwZXJtaXNzaW9uczogdGhpcy5fcGVybWlzc2lvbnMsIGRhdGE6IHRoaXMuZGF0YSB9KTtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyAvKiogZnJvbUpzb24gKi9cclxuICAgIC8vIHB1YmxpYyBzdGF0aWMgZnJvbUpzb248RGF0YVR5cGUgPSBhbnk+KHRleHQ6IHN0cmluZyk6IFVzZXJJZGVudGl0eTxEYXRhVHlwZT4ge1xyXG4gICAgLy8gICAgIHZhciBvYmogPSBKU09OLnBhcnNlKHRleHQpO1xyXG4gICAgLy8gICAgIGNvbnN0IHBlcm1pc3Npb25zOiBzdHJpbmdbXSA9IG9ialsncGVybWlzc2lvbnMnXTtcclxuICAgIC8vICAgICBjb25zdCBkYXRhOiBEYXRhVHlwZSA9IG9ialsnZGF0YSddO1xyXG4gICAgLy8gICAgIGlmICghQXJyYXkuaXNBcnJheShwZXJtaXNzaW9ucykpIHtcclxuICAgIC8vICAgICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgVXNlcklkZW50aXR5IEpTT04uJyk7XHJcbiAgICAvLyAgICAgfVxyXG5cclxuICAgIC8vICAgICByZXR1cm4gbmV3IFVzZXJJZGVudGl0eTxEYXRhVHlwZT4ocGVybWlzc2lvbnMsIGRhdGEpO1xyXG4gICAgLy8gfVxyXG59XHJcblxyXG4iXX0=