access_list.js 2.2 KB

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