easywork-common-lib 1.0.997 → 1.0.999

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,4 @@
1
+ import { User } from "../../../entities/user.entity";
1
2
  export declare enum Roles {
2
3
  ADMIN = "ADMIN",
3
4
  USER = "USER",
@@ -39,11 +40,29 @@ export declare enum PermissionCondition {
39
40
  TIME_BASED = "timeBased",
40
41
  STATUS_BASED = "statusBased"
41
42
  }
43
+ export interface FilterCondition {
44
+ field: string;
45
+ operator: "equals" | "in" | "contains" | "not_in" | "is_null" | "is_not_null" | "like" | "gt" | "gte" | "lt" | "lte";
46
+ value?: any;
47
+ values?: any[];
48
+ }
49
+ export interface FilterCriteria {
50
+ fields?: FilterCondition[];
51
+ includeOwn?: boolean;
52
+ includeAssigned?: boolean;
53
+ includeObserved?: boolean;
54
+ includeTeam?: boolean;
55
+ includeGroup?: boolean;
56
+ includeSupervised?: boolean;
57
+ orConditions?: FilterCriteria[];
58
+ andConditions?: FilterCriteria[];
59
+ }
42
60
  export interface PermissionRule {
43
61
  action: PermissionAction;
44
62
  scope: PermissionScope;
45
63
  conditions?: PermissionCondition[];
46
64
  roleLevel?: number;
65
+ filterCriteria?: FilterCriteria;
47
66
  customConditions?: Record<string, any>;
48
67
  timeRestrictions?: {
49
68
  createdWithin?: number;
@@ -55,3 +74,20 @@ export interface ResourcePermission {
55
74
  resource: string;
56
75
  rules: PermissionRule[];
57
76
  }
77
+ export interface PermissionContextType {
78
+ user: User;
79
+ resource: string;
80
+ action: PermissionAction;
81
+ targetEntity?: any;
82
+ additionalContext?: Record<string, any>;
83
+ }
84
+ export interface PermissionResult {
85
+ allowed: boolean;
86
+ scope?: PermissionScope;
87
+ filters?: Record<string, any>;
88
+ reason?: string;
89
+ }
90
+ export declare enum PermissionGroupScope {
91
+ GLOBAL = "global",
92
+ GROUP_SPECIFIC = "group_specific"
93
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PermissionCondition = exports.PermissionScope = exports.PermissionAction = exports.Roles = void 0;
3
+ exports.PermissionGroupScope = exports.PermissionCondition = exports.PermissionScope = exports.PermissionAction = exports.Roles = void 0;
4
4
  var Roles;
5
5
  (function (Roles) {
6
6
  Roles["ADMIN"] = "ADMIN";
@@ -46,4 +46,9 @@ var PermissionCondition;
46
46
  PermissionCondition["TIME_BASED"] = "timeBased";
47
47
  PermissionCondition["STATUS_BASED"] = "statusBased";
48
48
  })(PermissionCondition || (exports.PermissionCondition = PermissionCondition = {}));
49
+ var PermissionGroupScope;
50
+ (function (PermissionGroupScope) {
51
+ PermissionGroupScope["GLOBAL"] = "global";
52
+ PermissionGroupScope["GROUP_SPECIFIC"] = "group_specific";
53
+ })(PermissionGroupScope || (exports.PermissionGroupScope = PermissionGroupScope = {}));
49
54
  //# sourceMappingURL=permission.enum.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"permission.enum.js","sourceRoot":"","sources":["../../../../src/common/@types/enums/permission.enum.ts"],"names":[],"mappings":";;;AAAA,IAAY,KAKX;AALD,WAAY,KAAK;IACf,wBAAe,CAAA;IACf,sBAAa,CAAA;IACb,kCAAyB,CAAA;IACzB,0BAAiB,CAAA;AACnB,CAAC,EALW,KAAK,qBAAL,KAAK,QAKhB;AAED,IAAY,gBAeX;AAfD,WAAY,gBAAgB;IAC1B,qCAAiB,CAAA;IACjB,iCAAa,CAAA;IACb,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;IACjB,uCAAmB,CAAA;IACnB,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;IACjB,uCAAmB,CAAA;IACnB,mCAAe,CAAA;IACf,uCAAmB,CAAA;AACrB,CAAC,EAfW,gBAAgB,gCAAhB,gBAAgB,QAe3B;AAED,IAAY,eAOX;AAPD,WAAY,eAAe;IACzB,8BAAW,CAAA;IACX,gCAAa,CAAA;IACb,kCAAe,CAAA;IACf,8BAAW,CAAA;IACX,wCAAqB,CAAA;IACrB,4CAAyB,CAAA;AAC3B,CAAC,EAPW,eAAe,+BAAf,eAAe,QAO1B;AAED,IAAY,mBAUX;AAVD,WAAY,mBAAmB;IAC7B,wCAAiB,CAAA;IACjB,sCAAe,CAAA;IACf,iDAA0B,CAAA;IAC1B,4CAAqB,CAAA;IACrB,+CAAwB,CAAA;IACxB,6CAAsB,CAAA;IACtB,+CAAwB,CAAA;IACxB,+CAAwB,CAAA;IACxB,mDAA4B,CAAA;AAC9B,CAAC,EAVW,mBAAmB,mCAAnB,mBAAmB,QAU9B"}
1
+ {"version":3,"file":"permission.enum.js","sourceRoot":"","sources":["../../../../src/common/@types/enums/permission.enum.ts"],"names":[],"mappings":";;;AAEA,IAAY,KAKX;AALD,WAAY,KAAK;IACf,wBAAe,CAAA;IACf,sBAAa,CAAA;IACb,kCAAyB,CAAA;IACzB,0BAAiB,CAAA;AACnB,CAAC,EALW,KAAK,qBAAL,KAAK,QAKhB;AAED,IAAY,gBAeX;AAfD,WAAY,gBAAgB;IAC1B,qCAAiB,CAAA;IACjB,iCAAa,CAAA;IACb,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;IACjB,uCAAmB,CAAA;IACnB,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;IACjB,uCAAmB,CAAA;IACnB,mCAAe,CAAA;IACf,uCAAmB,CAAA;AACrB,CAAC,EAfW,gBAAgB,gCAAhB,gBAAgB,QAe3B;AAED,IAAY,eAOX;AAPD,WAAY,eAAe;IACzB,8BAAW,CAAA;IACX,gCAAa,CAAA;IACb,kCAAe,CAAA;IACf,8BAAW,CAAA;IACX,wCAAqB,CAAA;IACrB,4CAAyB,CAAA;AAC3B,CAAC,EAPW,eAAe,+BAAf,eAAe,QAO1B;AAED,IAAY,mBAUX;AAVD,WAAY,mBAAmB;IAC7B,wCAAiB,CAAA;IACjB,sCAAe,CAAA;IACf,iDAA0B,CAAA;IAC1B,4CAAqB,CAAA;IACrB,+CAAwB,CAAA;IACxB,6CAAsB,CAAA;IACtB,+CAAwB,CAAA;IACxB,+CAAwB,CAAA;IACxB,mDAA4B,CAAA;AAC9B,CAAC,EAVW,mBAAmB,mCAAnB,mBAAmB,QAU9B;AA6ED,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC9B,yCAAiB,CAAA;IACjB,yDAAiC,CAAA;AACnC,CAAC,EAHW,oBAAoB,oCAApB,oBAAoB,QAG/B"}
@@ -1,6 +1,7 @@
1
1
  import { EntityBase } from "../common/database/base.entity";
2
2
  import { Role } from "./role.entity";
3
- import { PermissionRule } from "../common";
3
+ import { PermissionGroupScope, PermissionRule } from "../common";
4
+ import { Group } from "./group.entity";
4
5
  export declare class Permission extends EntityBase {
5
6
  resource: string;
6
7
  rules: PermissionRule[];
@@ -8,4 +9,9 @@ export declare class Permission extends EntityBase {
8
9
  minRoleLevel?: number;
9
10
  maxRoleLevel?: number;
10
11
  useRoleLevel: boolean;
12
+ groupScope: PermissionGroupScope;
13
+ groups?: Group[];
14
+ description?: string;
15
+ priority?: number;
16
+ tags?: string[];
11
17
  }
@@ -14,6 +14,8 @@ const base_entity_1 = require("../common/database/base.entity");
14
14
  const typeorm_1 = require("typeorm");
15
15
  const role_entity_1 = require("./role.entity");
16
16
  const swagger_1 = require("@nestjs/swagger");
17
+ const common_1 = require("../common");
18
+ const group_entity_1 = require("./group.entity");
17
19
  let Permission = class Permission extends base_entity_1.EntityBase {
18
20
  resource;
19
21
  rules;
@@ -21,15 +23,37 @@ let Permission = class Permission extends base_entity_1.EntityBase {
21
23
  minRoleLevel;
22
24
  maxRoleLevel;
23
25
  useRoleLevel;
26
+ groupScope;
27
+ groups;
28
+ description;
29
+ priority;
30
+ tags;
24
31
  };
25
32
  exports.Permission = Permission;
26
33
  __decorate([
27
- (0, swagger_1.ApiProperty)({ type: String, description: "Resource for the permission" }),
34
+ (0, swagger_1.ApiProperty)({
35
+ type: String,
36
+ description: "Resource for the permission (e.g., 'contact', 'lead', 'policy')",
37
+ }),
28
38
  (0, typeorm_1.Column)(),
29
39
  __metadata("design:type", String)
30
40
  ], Permission.prototype, "resource", void 0);
31
41
  __decorate([
32
- (0, swagger_1.ApiProperty)({ type: String, description: "Rules for the permission" }),
42
+ (0, swagger_1.ApiProperty)({
43
+ type: "array",
44
+ description: "Dynamic permission rules with FilterCriteria for data-driven filtering",
45
+ example: [
46
+ {
47
+ action: "read",
48
+ scope: "assigned",
49
+ filterCriteria: {
50
+ includeOwn: true,
51
+ includeAssigned: true,
52
+ includeObserved: true,
53
+ },
54
+ },
55
+ ],
56
+ }),
33
57
  (0, typeorm_1.Column)({ type: "jsonb", nullable: true }),
34
58
  __metadata("design:type", Array)
35
59
  ], Permission.prototype, "rules", void 0);
@@ -63,6 +87,67 @@ __decorate([
63
87
  (0, typeorm_1.Column)({ type: "boolean", default: false }),
64
88
  __metadata("design:type", Boolean)
65
89
  ], Permission.prototype, "useRoleLevel", void 0);
90
+ __decorate([
91
+ (0, swagger_1.ApiProperty)({
92
+ type: String,
93
+ enum: common_1.PermissionGroupScope,
94
+ description: "Scope of permission application: 'global' for all groups, 'group_specific' for specific groups",
95
+ example: "group_specific",
96
+ }),
97
+ (0, typeorm_1.Column)({
98
+ type: "enum",
99
+ enum: common_1.PermissionGroupScope,
100
+ default: common_1.PermissionGroupScope.GROUP_SPECIFIC,
101
+ }),
102
+ __metadata("design:type", String)
103
+ ], Permission.prototype, "groupScope", void 0);
104
+ __decorate([
105
+ (0, swagger_1.ApiProperty)({
106
+ type: () => [group_entity_1.Group],
107
+ description: "Specific groups this permission applies to (when groupScope='group_specific'). Empty = applies to all groups",
108
+ required: false,
109
+ }),
110
+ (0, typeorm_1.ManyToMany)(() => group_entity_1.Group, {
111
+ onDelete: "CASCADE",
112
+ onUpdate: "CASCADE",
113
+ }),
114
+ (0, typeorm_1.JoinTable)({
115
+ name: "permission_groups",
116
+ joinColumn: { name: "permission_id", referencedColumnName: "id" },
117
+ inverseJoinColumn: { name: "group_id", referencedColumnName: "id" },
118
+ }),
119
+ __metadata("design:type", Array)
120
+ ], Permission.prototype, "groups", void 0);
121
+ __decorate([
122
+ (0, swagger_1.ApiProperty)({
123
+ type: String,
124
+ description: "Human-readable description of what this permission allows",
125
+ required: false,
126
+ example: "Allows team leads to read contacts they own, are assigned to, or observe",
127
+ }),
128
+ (0, typeorm_1.Column)({ type: "text", nullable: true }),
129
+ __metadata("design:type", String)
130
+ ], Permission.prototype, "description", void 0);
131
+ __decorate([
132
+ (0, swagger_1.ApiProperty)({
133
+ type: Number,
134
+ description: "Priority order when multiple permissions apply (lower = higher priority)",
135
+ required: false,
136
+ example: 1,
137
+ }),
138
+ (0, typeorm_1.Column)({ type: "int", nullable: true, default: 100 }),
139
+ __metadata("design:type", Number)
140
+ ], Permission.prototype, "priority", void 0);
141
+ __decorate([
142
+ (0, swagger_1.ApiProperty)({
143
+ type: String,
144
+ description: "Optional tags for permission categorization and filtering",
145
+ required: false,
146
+ example: ["sales", "crm", "basic"],
147
+ }),
148
+ (0, typeorm_1.Column)({ type: "jsonb", nullable: true }),
149
+ __metadata("design:type", Array)
150
+ ], Permission.prototype, "tags", void 0);
66
151
  exports.Permission = Permission = __decorate([
67
152
  (0, typeorm_1.Entity)()
68
153
  ], Permission);
@@ -1 +1 @@
1
- {"version":3,"file":"permission.entity.js","sourceRoot":"","sources":["../../src/entities/permission.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gEAA4D;AAC5D,qCAAgE;AAChE,+CAAqC;AACrC,6CAA8C;AAIvC,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,wBAAU;IAGxC,QAAQ,CAAS;IAIjB,KAAK,CAAmB;IAWxB,KAAK,CAAU;IAIf,YAAY,CAAU;IAItB,YAAY,CAAU;IAOtB,YAAY,CAAU;CACvB,CAAA;AAlCY,gCAAU;AAGrB;IAFC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC;IACzE,IAAA,gBAAM,GAAE;;4CACQ;AAIjB;IAFC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,0BAA0B,EAAE,CAAC;IACtE,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yCAClB;AAWxB;IATC,IAAA,qBAAW,EAAC;QACX,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,kBAAI,CAAC;QAClB,WAAW,EAAE,sCAAsC;KACpD,CAAC;IACD,IAAA,oBAAU,EAAC,GAAG,EAAE,CAAC,kBAAI,EAAE;QACtB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,SAAS;KACpB,CAAC;IACD,IAAA,mBAAS,GAAE;;yCACG;AAIf;IAFC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC;IACzE,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;gDAClB;AAItB;IAFC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC;IACxE,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;gDAClB;AAOtB;IALC,IAAA,qBAAW,EAAC;QACX,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,6CAA6C;KAC3D,CAAC;IACD,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;;gDACtB;qBAjCX,UAAU;IADtB,IAAA,gBAAM,GAAE;GACI,UAAU,CAkCtB"}
1
+ {"version":3,"file":"permission.entity.js","sourceRoot":"","sources":["../../src/entities/permission.entity.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "easywork-common-lib",
3
- "version": "1.0.997",
3
+ "version": "1.0.999",
4
4
  "description": "Librería común de Easywork",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {