@spinajs/rbac 1.2.211 → 2.0.12

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.
package/lib/auth.js CHANGED
@@ -23,12 +23,7 @@ let SimpleDbAuthProvider = class SimpleDbAuthProvider {
23
23
  }
24
24
  async authenticate(email, password) {
25
25
  const pwd = this.Container.resolve(interfaces_1.PasswordProvider);
26
- const result = await User_1.User.where({
27
- Email: email,
28
- })
29
- .andWhere('DeletedAt', null)
30
- .populate('Metadata')
31
- .first();
26
+ const result = await User_1.User.where({ Email: email, DeletedAt: null }).first();
32
27
  if (!result) {
33
28
  return null;
34
29
  }
package/lib/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8D;AAC9D,wCAAqC;AACrC,oCAA4E;AAG5E,IAAa,oBAAoB,GAAjC,MAAa,oBAAoB;IAIxB,KAAK,CAAC,MAAM,CAAC,IAAmB;QACrC,MAAM,MAAM,GAAG,MAAM,WAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,YAAY,WAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QAC3F,IAAI,MAAM,EAAE;YACV,OAAO,IAAI,CAAC;SACb;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,QAAgB;QACvD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,6BAAgB,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,WAAI,CAAC,KAAK,CAAC;YAC9B,KAAK,EAAE,KAAK;SACb,CAAC;aACC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;aAC3B,QAAQ,CAAC,UAAU,CAAC;aACpB,KAAK,EAAE,CAAC;QAEX,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,IAAI,CAAC;SACb;QAED,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1D,IAAI,KAAK,EAAE;YACT,OAAO,MAAM,CAAC;SACf;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AA/BC;IADC,IAAA,eAAU,EAAC,cAAS,CAAC;;uDACU;AAFrB,oBAAoB;IADhC,IAAA,eAAU,EAAC,yBAAY,CAAC;GACZ,oBAAoB,CAiChC;AAjCY,oDAAoB"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8D;AAC9D,wCAAqC;AACrC,oCAA4E;AAG5E,IAAa,oBAAoB,GAAjC,MAAa,oBAAoB;IAIxB,KAAK,CAAC,MAAM,CAAC,IAAmB;QACrC,MAAM,MAAM,GAAG,MAAM,WAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,YAAY,WAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QAC3F,IAAI,MAAM,EAAE;YACV,OAAO,IAAI,CAAC;SACb;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,QAAgB;QACvD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,6BAAgB,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,WAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QAE3E,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,IAAI,CAAC;SACb;QAED,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1D,IAAI,KAAK,EAAE;YACT,OAAO,MAAM,CAAC;SACf;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AA1BC;IADC,IAAA,eAAU,EAAC,cAAS,CAAC;;uDACU;AAFrB,oBAAoB;IADhC,IAAA,eAAU,EAAC,yBAAY,CAAC;GACZ,oBAAoB,CA4BhC;AA5BY,oDAAoB"}
@@ -1,32 +1,30 @@
1
1
  import { User } from './models/User';
2
2
  import { AsyncModule } from '@spinajs/di';
3
3
  import { DateTime } from 'luxon';
4
- export interface UserSessionData {
4
+ export interface ISession {
5
5
  /**
6
6
  * Session identifier
7
7
  */
8
- SessionId?: string;
8
+ SessionId: string;
9
9
  /**
10
10
  * Expiration date. After that date session is invalid
11
11
  */
12
- Expiration: DateTime;
12
+ Expiration?: DateTime;
13
13
  /**
14
14
  * Session creation date. After that date session is invalid
15
15
  */
16
- Creation?: DateTime;
16
+ Creation: DateTime;
17
17
  /**
18
18
  * Data holds by session
19
19
  */
20
- Data: any;
21
- }
22
- export interface UserSession extends UserSessionData {
20
+ Data: Map<string, unknown>;
23
21
  /**
24
22
  *
25
23
  * Extends session lifetime
26
24
  *
27
- * @param minutes - how mutch to extend
25
+ * @param minutes - how mutch to extend, if value not provided, default value from config is used
28
26
  */
29
- extend(minutes: number): void;
27
+ extend(minutes?: number): void;
30
28
  }
31
29
  /**
32
30
  * Service used for generating random password & for hash raw string
@@ -56,33 +54,26 @@ export declare abstract class AuthProvider<U = User> {
56
54
  abstract exists(user: U): Promise<boolean>;
57
55
  abstract authenticate(email: string, password: string): Promise<U>;
58
56
  }
59
- export declare abstract class SessionProvider<T = UserSession> extends AsyncModule {
57
+ export declare abstract class SessionProvider<T = ISession> extends AsyncModule {
60
58
  /**
61
59
  *
62
60
  * Load session from store. If not exists or expired returns null
63
61
  *
64
62
  * @param sessionId - session identifier
65
63
  */
66
- abstract restoreSession(sessionId: string): Promise<T>;
64
+ abstract restore(sessionId: string): Promise<T>;
67
65
  /**
68
66
  *
69
67
  * Deletes session from store
70
68
  *
71
69
  * @param sessionId - session to delete
72
70
  */
73
- abstract deleteSession(sessionId: string): Promise<void>;
71
+ abstract delete(sessionId: string): Promise<void>;
74
72
  /**
75
73
  *
76
74
  * Adds or updates session in store
77
75
  *
78
76
  * @param session - session to update / insert
79
77
  */
80
- abstract updateSession(session: UserSession): Promise<void>;
81
- /**
82
- *
83
- * Extends session expiration time. Extension is set in acl.session.expiration (in seconds)
84
- *
85
- * @param sessionId - session to refres
86
- */
87
- abstract refreshSession(sessionId: string | UserSession): Promise<void>;
78
+ abstract save(session: ISession): Promise<void>;
88
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":";;;AACA,oCAA0C;AAmC1C;;GAEG;AACH,MAAsB,gBAAgB;CAsBrC;AAtBD,4CAsBC;AAED,MAAsB,YAAY;CAIjC;AAJD,oCAIC;AAED,MAAsB,eAAiC,SAAQ,gBAAW;CAgCzE;AAhCD,0CAgCC"}
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":";;;AACA,oCAA0C;AAiC1C;;GAEG;AACH,MAAsB,gBAAgB;CAsBrC;AAtBD,4CAsBC;AAED,MAAsB,YAAY;CAIjC;AAJD,oCAIC;AAED,MAAsB,eAA8B,SAAQ,gBAAW;CAwBtE;AAxBD,0CAwBC"}
@@ -12,25 +12,23 @@ const orm_1 = require("@spinajs/orm");
12
12
  let RBACInitial_2022_06_28_01_13_00 = class RBACInitial_2022_06_28_01_13_00 extends orm_1.OrmMigration {
13
13
  async up(connection) {
14
14
  await connection.schema().createTable('users', (table) => {
15
- table.int('Id').autoIncrement().primaryKey();
16
- table.string('Login', 64).unique().notNull();
15
+ table.int('Id').primaryKey().autoIncrement();
17
16
  table.string('Email', 64).unique().notNull();
18
17
  table.string('Password', 128).notNull();
19
- table.string('NiceName', 64).notNull();
20
- table.string('Role', 64).notNull();
18
+ table.string('Login', 64).notNull();
19
+ table.string('Role', 256).notNull();
21
20
  table.dateTime('RegisteredAt');
22
- table.dateTime('CreatedAt').notNull();
21
+ table.dateTime('CreatedAt').notNull().default().dateTime();
23
22
  table.dateTime('DeletedAt');
24
23
  });
25
- await connection.schema().createTable('user_metadatas', (table) => {
26
- table.int('Id').autoIncrement().primaryKey();
24
+ await connection.schema().createTable('users_metadata', (table) => {
27
25
  table.string('Key', 255).notNull();
28
26
  table.text('Value').notNull();
29
27
  table.int('user_id').notNull();
30
28
  table.foreignKey('user_id').references('users', 'Id').cascade();
31
29
  });
32
- await connection.index().unique().table('users').name('users_email_idx').columns(['Email']);
33
- await connection.index().unique().table('user_metadatas').name('owner_user_meta_key_idx').columns(['user_id', 'Key']);
30
+ await connection.index().unique().table('users_metadata').name('owner_user_meta_key_idx').columns(['user_id', 'Key']);
31
+ await connection.index().unique().table('users').name('user_login_idx').columns(['Login']);
34
32
  }
35
33
  // tslint:disable-next-line: no-empty
36
34
  // eslint-disable-next-line @typescript-eslint/no-empty-function
@@ -1 +1 @@
1
- {"version":3,"file":"RBACInitial_2022_06_28_01_13_00.js","sourceRoot":"","sources":["../../src/migrations/RBACInitial_2022_06_28_01_13_00.ts"],"names":[],"mappings":";;;;;;;;;AAAA,sDAAsD;AACtD,sCAAkE;AAGlE,IAAa,+BAA+B,GAA5C,MAAa,+BAAgC,SAAQ,kBAAY;IACxD,KAAK,CAAC,EAAE,CAAC,UAAqB;QACnC,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACvD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC,UAAU,EAAE,CAAC;YAC7C,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;YAC7C,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;YAC7C,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YACxC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YACvC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YACnC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;YAC/B,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC;YACtC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE;YAChE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC,UAAU,EAAE,CAAC;YAC7C,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;YAC9B,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;YAC/B,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAE5F,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IACxH,CAAC;IAED,qCAAqC;IACrC,gEAAgE;IACzD,KAAK,CAAC,IAAI,CAAC,WAAsB,IAAkB,CAAC;CAC5D,CAAA;AA9BY,+BAA+B;IAD3C,IAAA,eAAS,EAAC,SAAS,CAAC;GACR,+BAA+B,CA8B3C;AA9BY,0EAA+B"}
1
+ {"version":3,"file":"RBACInitial_2022_06_28_01_13_00.js","sourceRoot":"","sources":["../../src/migrations/RBACInitial_2022_06_28_01_13_00.ts"],"names":[],"mappings":";;;;;;;;;AAAA,sDAAsD;AACtD,sCAAkE;AAGlE,IAAa,+BAA+B,GAA5C,MAAa,+BAAgC,SAAQ,kBAAY;IACxD,KAAK,CAAC,EAAE,CAAC,UAAqB;QACnC,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACvD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,aAAa,EAAE,CAAC;YAC7C,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;YAC7C,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YACxC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YACpC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YACpC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;YAC/B,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;YAC3D,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE;YAChE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;YAC9B,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;YAC/B,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QACtH,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,qCAAqC;IACrC,gEAAgE;IACzD,KAAK,CAAC,IAAI,CAAC,WAAsB,IAAkB,CAAC;CAC5D,CAAA;AA3BY,+BAA+B;IAD3C,IAAA,eAAS,EAAC,SAAS,CAAC;GACR,+BAA+B,CA2B3C;AA3BY,0EAA+B"}
@@ -7,29 +7,29 @@ import { UserMetadata } from './UserMetadata';
7
7
  * To add / extend fields simply extend this model and register as default user model in ACL service
8
8
  */
9
9
  export declare class User extends ModelBase {
10
+ protected _hidden: string[];
10
11
  Id: number;
11
12
  Email: string;
12
- Login: string;
13
13
  /**
14
14
  * Hashed password for user
15
15
  */
16
16
  Password: string;
17
- /**
18
- * Registration date. User is registered when clicked confirmation link sended to provided email.
19
- */
20
- RegisteredAt: DateTime;
21
17
  /**
22
18
  * Displayed name ( for others to see )
23
19
  */
24
- NiceName: string;
20
+ Login: string;
25
21
  /**
26
22
  * User role
27
23
  */
28
- Role: string;
24
+ Role: string[];
29
25
  /**
30
26
  * User creation date
31
27
  */
32
28
  CreatedAt: DateTime;
29
+ /**
30
+ * Registration date. User is registered when clicked confirmation link sended to provided email.
31
+ */
32
+ RegisteredAt: DateTime;
33
33
  /**
34
34
  * User deletion date
35
35
  */
@@ -38,4 +38,5 @@ export declare class User extends ModelBase {
38
38
  * User additional information. Can be anything
39
39
  */
40
40
  Metadata: Relation<UserMetadata>;
41
+ can(resource: string, permission: string): any;
41
42
  }
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.User = void 0;
13
13
  const luxon_1 = require("luxon");
14
14
  const orm_1 = require("@spinajs/orm");
15
+ const di_1 = require("@spinajs/di");
15
16
  const UserMetadata_1 = require("./UserMetadata");
16
17
  /**
17
18
  * Base modele for users used by ACL
@@ -19,6 +20,14 @@ const UserMetadata_1 = require("./UserMetadata");
19
20
  * To add / extend fields simply extend this model and register as default user model in ACL service
20
21
  */
21
22
  let User = class User extends orm_1.ModelBase {
23
+ constructor() {
24
+ super(...arguments);
25
+ this._hidden = ['Password'];
26
+ }
27
+ can(resource, permission) {
28
+ const ac = di_1.DI.get('AccessControl');
29
+ return ac.can(this.Role)[permission](resource);
30
+ }
22
31
  };
23
32
  __decorate([
24
33
  (0, orm_1.Primary)(),
@@ -1 +1 @@
1
- {"version":3,"file":"User.js","sourceRoot":"","sources":["../../src/models/User.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iCAAiC;AACjC,sCAA+G;AAC/G,iDAA8C;AAE9C;;;;GAIG;AAGH,IAAa,IAAI,GAAjB,MAAa,IAAK,SAAQ,eAAS;CA6ClC,CAAA;AA3CC;IADC,IAAA,aAAO,GAAE;;gCACQ;AA8BlB;IADC,IAAA,eAAS,GAAE;8BACM,gBAAQ;uCAAC;AAM3B;IADC,IAAA,gBAAU,GAAE;8BACK,gBAAQ;uCAAC;AAM3B;IADC,IAAA,aAAO,EAAC,2BAAY,CAAC;8BACL,cAAQ;sCAAe;AA5C7B,IAAI;IAFhB,IAAA,gBAAU,EAAC,SAAS,CAAC;IACrB,IAAA,WAAK,EAAC,OAAO,CAAC;GACF,IAAI,CA6ChB;AA7CY,oBAAI"}
1
+ {"version":3,"file":"User.js","sourceRoot":"","sources":["../../src/models/User.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iCAAiC;AACjC,sCAA+G;AAE/G,oCAAiC;AACjC,iDAA8C;AAE9C;;;;GAIG;AAGH,IAAa,IAAI,GAAjB,MAAa,IAAK,SAAQ,eAAS;IAAnC;;QACY,YAAO,GAAa,CAAC,UAAU,CAAC,CAAC;IAiD7C,CAAC;IAJQ,GAAG,CAAC,QAAgB,EAAE,UAAkB;QAC7C,MAAM,EAAE,GAAG,OAAE,CAAC,GAAG,CAAgB,eAAe,CAAC,CAAC;QAClD,OAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAS,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC1D,CAAC;CACF,CAAA;AA9CC;IADC,IAAA,aAAO,GAAE;;gCACQ;AAuBlB;IADC,IAAA,eAAS,GAAE;8BACM,gBAAQ;uCAAC;AAW3B;IADC,IAAA,gBAAU,GAAE;8BACK,gBAAQ;uCAAC;AAM3B;IADC,IAAA,aAAO,EAAC,2BAAY,CAAC;8BACL,cAAQ;sCAAe;AA5C7B,IAAI;IAFhB,IAAA,gBAAU,EAAC,SAAS,CAAC;IACrB,IAAA,WAAK,EAAC,OAAO,CAAC;GACF,IAAI,CAkDhB;AAlDY,oBAAI"}
@@ -1,6 +1,8 @@
1
- import { ModelBase } from '@spinajs/orm';
1
+ import { ModelBase, SingleRelation } from '@spinajs/orm';
2
+ import type { User } from './User';
2
3
  export declare class UserMetadata extends ModelBase {
3
4
  Id: number;
4
5
  Key: string;
5
6
  Value: string;
7
+ User: SingleRelation<User>;
6
8
  }
@@ -17,9 +17,13 @@ __decorate([
17
17
  (0, orm_1.Primary)(),
18
18
  __metadata("design:type", Number)
19
19
  ], UserMetadata.prototype, "Id", void 0);
20
+ __decorate([
21
+ (0, orm_1.BelongsTo)('User'),
22
+ __metadata("design:type", orm_1.SingleRelation)
23
+ ], UserMetadata.prototype, "User", void 0);
20
24
  UserMetadata = __decorate([
21
25
  (0, orm_1.Connection)('default'),
22
- (0, orm_1.Model)('user_metadatas')
26
+ (0, orm_1.Model)('users_metadata')
23
27
  ], UserMetadata);
24
28
  exports.UserMetadata = UserMetadata;
25
29
  //# sourceMappingURL=UserMetadata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UserMetadata.js","sourceRoot":"","sources":["../../src/models/UserMetadata.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sCAAqE;AAIrE,IAAa,YAAY,GAAzB,MAAa,YAAa,SAAQ,eAAS;CAO1C,CAAA;AALC;IADC,IAAA,aAAO,GAAE;;wCACQ;AAFP,YAAY;IAFxB,IAAA,gBAAU,EAAC,SAAS,CAAC;IACrB,IAAA,WAAK,EAAC,gBAAgB,CAAC;GACX,YAAY,CAOxB;AAPY,oCAAY"}
1
+ {"version":3,"file":"UserMetadata.js","sourceRoot":"","sources":["../../src/models/UserMetadata.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sCAAgG;AAKhG,IAAa,YAAY,GAAzB,MAAa,YAAa,SAAQ,eAAS;CAU1C,CAAA;AARC;IADC,IAAA,aAAO,GAAE;;wCACQ;AAOlB;IADC,IAAA,eAAS,EAAC,MAAM,CAAC;8BACL,oBAAc;0CAAO;AATvB,YAAY;IAFxB,IAAA,gBAAU,EAAC,SAAS,CAAC;IACrB,IAAA,WAAK,EAAC,gBAAgB,CAAC;GACX,YAAY,CAUxB;AAVY,oCAAY"}
package/lib/session.d.ts CHANGED
@@ -1,32 +1,33 @@
1
1
  import { DateTime } from 'luxon';
2
- import { SessionProvider, UserSession, UserSessionData } from './interfaces';
2
+ import { SessionProvider, ISession } from './interfaces';
3
3
  import { Configuration } from '@spinajs/configuration';
4
4
  /**
5
5
  * Session base class
6
6
  */
7
- export declare class Session implements UserSession {
7
+ export declare class Session implements ISession {
8
8
  protected SessionExpirationTime: number;
9
9
  SessionId: string;
10
+ /**
11
+ * Expiration time for session, if null it does not expire
12
+ */
10
13
  Expiration: DateTime;
11
- Data: any;
14
+ Data: Map<string, unknown>;
12
15
  Creation: DateTime;
13
- constructor(data?: UserSessionData);
16
+ constructor(session?: Partial<ISession>);
14
17
  /**
15
18
  * Extends lifetime of session
16
19
  *
17
- * @param minutes - hom mutch to extend
20
+ * @param seconds - hom mutch to extend
18
21
  */
19
- extend(minutes: number): void;
22
+ extend(seconds?: number): void;
20
23
  }
21
24
  /**
22
- * Simple session storage in memory
25
+ * Simple session storage in memory, for testing or rapid prototyping
23
26
  */
24
- export declare class MemorySessionStore<T = UserSession> extends SessionProvider<T> {
27
+ export declare class MemorySessionStore extends SessionProvider<ISession> {
25
28
  protected Configuration: Configuration;
26
- protected Sessions: Map<string, UserSession>;
27
- restoreSession(sessionId: string): Promise<T>;
28
- resolveAsync(): Promise<void>;
29
- deleteSession(sessionId: string): Promise<void>;
30
- updateSession(session: UserSession): Promise<void>;
31
- refreshSession(sessionId: string): Promise<void>;
29
+ protected Sessions: Map<string, ISession>;
30
+ restore(sessionId: string): Promise<ISession | null>;
31
+ delete(sessionId: string): Promise<void>;
32
+ save(session: ISession): Promise<void>;
32
33
  }
package/lib/session.js CHANGED
@@ -19,28 +19,25 @@ const uuid_1 = require("uuid");
19
19
  * Session base class
20
20
  */
21
21
  let Session = class Session {
22
- constructor(data) {
23
- if (data) {
24
- Object.assign(this, data);
25
- }
26
- if (!this.SessionId) {
27
- this.SessionId = (0, uuid_1.v4)();
28
- }
22
+ constructor(session) {
23
+ this.SessionId = (0, uuid_1.v4)();
29
24
  /**
30
- * always extend session time
25
+ * Expiration time for session, if null it does not expire
31
26
  */
32
- this.Expiration = luxon_1.DateTime.now().plus({ minutes: this.SessionExpirationTime });
33
- if (!this.Creation) {
34
- this.Creation = luxon_1.DateTime.now();
27
+ this.Expiration = null;
28
+ this.Data = new Map();
29
+ this.Creation = luxon_1.DateTime.now();
30
+ if (session) {
31
+ Object.assign(this, session);
35
32
  }
36
33
  }
37
34
  /**
38
35
  * Extends lifetime of session
39
36
  *
40
- * @param minutes - hom mutch to extend
37
+ * @param seconds - hom mutch to extend
41
38
  */
42
- extend(minutes) {
43
- this.Expiration.plus({ minutes });
39
+ extend(seconds) {
40
+ this.Expiration = luxon_1.DateTime.now().plus({ seconds: seconds ? seconds : this.SessionExpirationTime });
44
41
  }
45
42
  };
46
43
  __decorate([
@@ -53,40 +50,31 @@ Session = __decorate([
53
50
  ], Session);
54
51
  exports.Session = Session;
55
52
  /**
56
- * Simple session storage in memory
53
+ * Simple session storage in memory, for testing or rapid prototyping
57
54
  */
58
55
  let MemorySessionStore = class MemorySessionStore extends interfaces_1.SessionProvider {
59
56
  constructor() {
60
57
  super(...arguments);
61
58
  this.Sessions = new Map();
62
59
  }
63
- async restoreSession(sessionId) {
60
+ async restore(sessionId) {
64
61
  if (this.Sessions.has(sessionId)) {
65
62
  const session = this.Sessions.get(sessionId);
66
- if (session.Expiration <= luxon_1.DateTime.now()) {
67
- this.deleteSession(session.SessionId);
68
- return null;
63
+ if (!session.Expiration || session.Expiration > luxon_1.DateTime.now()) {
64
+ return session;
69
65
  }
70
- return session;
66
+ return null;
71
67
  }
72
68
  return null;
73
69
  }
74
- // tslint:disable-next-line: no-empty
75
- async resolveAsync() { }
76
- async deleteSession(sessionId) {
70
+ async delete(sessionId) {
77
71
  if (this.Sessions.has(sessionId)) {
78
72
  this.Sessions.delete(sessionId);
79
73
  }
80
74
  }
81
- async updateSession(session) {
75
+ async save(session) {
82
76
  this.Sessions.set(session.SessionId, session);
83
77
  }
84
- async refreshSession(sessionId) {
85
- if (this.Sessions.has(sessionId)) {
86
- const session = this.Sessions.get(sessionId);
87
- session.extend(this.Configuration.get('acl.session.expiration', 10));
88
- }
89
- }
90
78
  };
91
79
  __decorate([
92
80
  (0, di_1.Autoinject)(),
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iCAAiC;AACjC,6CAA6E;AAC7E,oCAAkE;AAClE,0DAA+D;AAC/D,+BAAoC;AAEpC;;GAEG;AAEH,IAAa,OAAO,GAApB,MAAa,OAAO;IAYlB,YAAY,IAAsB;QAChC,IAAI,IAAI,EAAE;YACR,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SAC3B;QAED,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,IAAA,SAAM,GAAE,CAAC;SAC3B;QAED;;WAEG;QACH,IAAI,CAAC,UAAU,GAAG,gBAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;QAE/E,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,QAAQ,GAAG,gBAAQ,CAAC,GAAG,EAAE,CAAC;SAChC;IACH,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,OAAe;QAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACpC,CAAC;CACF,CAAA;AArCC;IADC,IAAA,sBAAM,EAAC,yBAAyB,CAAC;;sDACM;AAF7B,OAAO;IADnB,IAAA,gBAAW,GAAE;;GACD,OAAO,CAuCnB;AAvCY,0BAAO;AAyCpB;;GAEG;AAEH,IAAa,kBAAkB,GAA/B,MAAa,kBAAoC,SAAQ,4BAAkB;IAA3E;;QAIY,aAAQ,GAA6B,IAAI,GAAG,EAAuB,CAAC;IAqChF,CAAC;IAnCQ,KAAK,CAAC,cAAc,CAAC,SAAiB;QAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YAChC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAE7C,IAAI,OAAO,CAAC,UAAU,IAAI,gBAAQ,CAAC,GAAG,EAAE,EAAE;gBACxC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACtC,OAAO,IAAI,CAAC;aACb;YAED,OAAO,OAAc,CAAC;SACvB;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qCAAqC;IAC9B,KAAK,CAAC,YAAY,KAAI,CAAC;IAEvB,KAAK,CAAC,aAAa,CAAC,SAAiB;QAC1C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YAChC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SACjC;IACH,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,OAAoB;QAC7C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,SAAiB;QAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YAChC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAE7C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,wBAAwB,EAAE,EAAE,CAAC,CAAC,CAAC;SAC9E;IACH,CAAC;CACF,CAAA;AAvCC;IADC,IAAA,eAAU,GAAE;8BACY,6BAAa;yDAAC;AAF5B,kBAAkB;IAD9B,IAAA,eAAU,EAAC,4BAAe,CAAC;GACf,kBAAkB,CAyC9B;AAzCY,gDAAkB"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iCAAiC;AACjC,6CAAyD;AACzD,oCAAkE;AAClE,0DAA+D;AAC/D,+BAAoC;AAEpC;;GAEG;AAEH,IAAa,OAAO,GAApB,MAAa,OAAO;IAelB,YAAY,OAA2B;QAXhC,cAAS,GAAW,IAAA,SAAM,GAAE,CAAC;QAEpC;;WAEG;QACI,eAAU,GAAa,IAAI,CAAC;QAE5B,SAAI,GAAyB,IAAI,GAAG,EAAE,CAAC;QAEvC,aAAQ,GAAa,gBAAQ,CAAC,GAAG,EAAE,CAAC;QAGzC,IAAI,OAAO,EAAE;YACX,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SAC9B;IACH,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,OAAgB;QAC5B,IAAI,CAAC,UAAU,GAAG,gBAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;IACrG,CAAC;CACF,CAAA;AA3BC;IADC,IAAA,sBAAM,EAAC,yBAAyB,CAAC;;sDACM;AAF7B,OAAO;IADnB,IAAA,gBAAW,GAAE;;GACD,OAAO,CA6BnB;AA7BY,0BAAO;AA+BpB;;GAEG;AAEH,IAAa,kBAAkB,GAA/B,MAAa,kBAAmB,SAAQ,4BAAyB;IAAjE;;QAIY,aAAQ,GAA0B,IAAI,GAAG,EAAoB,CAAC;IAuB1E,CAAC;IArBQ,KAAK,CAAC,OAAO,CAAC,SAAiB;QACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YAChC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,GAAG,gBAAQ,CAAC,GAAG,EAAE,EAAE;gBAC9D,OAAO,OAAO,CAAC;aAChB;YACD,OAAO,IAAI,CAAC;SACb;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,SAAiB;QACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YAChC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SACjC;IACH,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,OAAiB;QACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;CACF,CAAA;AAzBC;IADC,IAAA,eAAU,GAAE;8BACY,6BAAa;yDAAC;AAF5B,kBAAkB;IAD9B,IAAA,eAAU,EAAC,4BAAe,CAAC;GACf,kBAAkB,CA2B9B;AA3BY,gDAAkB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spinajs/rbac",
3
- "version": "1.2.211",
3
+ "version": "2.0.12",
4
4
  "description": "Role and Attribute based Access Control for SpinaJS framework",
5
5
  "main": "lib/index.js",
6
6
  "private": false,
@@ -38,12 +38,12 @@
38
38
  },
39
39
  "homepage": "https://github.com/spinajs/main#readme",
40
40
  "dependencies": {
41
- "@spinajs/configuration": "^1.2.211",
42
- "@spinajs/di": "^1.2.211",
43
- "@spinajs/exceptions": "^1.2.127",
44
- "@spinajs/log": "^1.2.211",
45
- "@spinajs/orm": "^1.2.211",
46
- "@spinajs/reflection": "^1.2.211",
41
+ "@spinajs/configuration": "^2.0.12",
42
+ "@spinajs/di": "^2.0.12",
43
+ "@spinajs/exceptions": "^2.0.12",
44
+ "@spinajs/log": "^2.0.12",
45
+ "@spinajs/orm": "^2.0.12",
46
+ "@spinajs/reflection": "^2.0.12",
47
47
  "accesscontrol": "^2.2.1",
48
48
  "argon2": "^0.28.5",
49
49
  "entropy-string": "^4.2.0",
@@ -52,7 +52,7 @@
52
52
  "uuid": "^8.1.0"
53
53
  },
54
54
  "devDependencies": {
55
- "@spinajs/orm-sqlite": "^1.2.211"
55
+ "@spinajs/orm-sqlite": "^2.0.12"
56
56
  },
57
- "gitHead": "70d07e9437552855ac6c986465929a31ee49f5c3"
57
+ "gitHead": "d7910d799995df6fa9eb8174d4a9b65c81db8352"
58
58
  }