access_list.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. // Objection Docs:
  2. // http://vincit.github.io/objection.js/
  3. const db = require('../db');
  4. const Model = require('objection').Model;
  5. const User = require('./user');
  6. const AccessListAuth = require('./access_list_auth');
  7. const AccessListClient = require('./access_list_client');
  8. const now = require('./now_helper');
  9. Model.knex(db);
  10. class AccessList extends Model {
  11. $beforeInsert () {
  12. this.created_on = now();
  13. this.modified_on = now();
  14. // Default for meta
  15. if (typeof this.meta === 'undefined') {
  16. this.meta = {};
  17. }
  18. }
  19. $beforeUpdate () {
  20. this.modified_on = now();
  21. }
  22. static get name () {
  23. return 'AccessList';
  24. }
  25. static get tableName () {
  26. return 'access_list';
  27. }
  28. static get jsonAttributes () {
  29. return ['meta'];
  30. }
  31. static get relationMappings () {
  32. const ProxyHost = require('./proxy_host');
  33. return {
  34. owner: {
  35. relation: Model.HasOneRelation,
  36. modelClass: User,
  37. join: {
  38. from: 'access_list.owner_user_id',
  39. to: 'user.id'
  40. },
  41. modify: function (qb) {
  42. qb.where('user.is_deleted', 0);
  43. qb.omit(['id', 'created_on', 'modified_on', 'is_deleted', 'email', 'roles']);
  44. }
  45. },
  46. items: {
  47. relation: Model.HasManyRelation,
  48. modelClass: AccessListAuth,
  49. join: {
  50. from: 'access_list.id',
  51. to: 'access_list_auth.access_list_id'
  52. },
  53. modify: function (qb) {
  54. qb.omit(['id', 'created_on', 'modified_on', 'access_list_id', 'meta']);
  55. }
  56. },
  57. clients: {
  58. relation: Model.HasManyRelation,
  59. modelClass: AccessListClient,
  60. join: {
  61. from: 'access_list.id',
  62. to: 'access_list_client.access_list_id'
  63. },
  64. modify: function (qb) {
  65. qb.omit(['id', 'created_on', 'modified_on', 'access_list_id', 'meta']);
  66. }
  67. },
  68. proxy_hosts: {
  69. relation: Model.HasManyRelation,
  70. modelClass: ProxyHost,
  71. join: {
  72. from: 'access_list.id',
  73. to: 'proxy_host.access_list_id'
  74. },
  75. modify: function (qb) {
  76. qb.where('proxy_host.is_deleted', 0);
  77. qb.omit(['is_deleted', 'meta']);
  78. }
  79. }
  80. };
  81. }
  82. get satisfy() {
  83. return this.satisfy_any ? 'satisfy any' : 'satisfy all';
  84. }
  85. }
  86. module.exports = AccessList;