permissions.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. const Mn = require('backbone.marionette');
  2. const App = require('../main');
  3. const UserModel = require('../../models/user');
  4. const template = require('./permissions.ejs');
  5. require('jquery-serializejson');
  6. module.exports = Mn.View.extend({
  7. template: template,
  8. className: 'modal-dialog',
  9. ui: {
  10. form: 'form',
  11. buttons: '.modal-footer button',
  12. cancel: 'button.cancel',
  13. save: 'button.save',
  14. error: '.secret-error'
  15. },
  16. events: {
  17. 'click @ui.save': function (e) {
  18. e.preventDefault();
  19. let view = this;
  20. let data = this.ui.form.serializeJSON();
  21. // Manipulate
  22. if (view.model.isAdmin()) {
  23. // Force some attributes for admin
  24. data = _.assign({}, data, {
  25. access_lists: 'manage',
  26. dead_hosts: 'manage',
  27. proxy_hosts: 'manage',
  28. redirection_hosts: 'manage',
  29. ssl_passthrough_hosts: 'manage',
  30. streams: 'manage',
  31. certificates: 'manage'
  32. });
  33. }
  34. this.ui.buttons.prop('disabled', true).addClass('btn-disabled');
  35. App.Api.Users.setPermissions(view.model.get('id'), data)
  36. .then(() => {
  37. if (view.model.get('id') === App.Cache.User.get('id')) {
  38. App.Cache.User.set({permissions: data});
  39. }
  40. view.model.set({permissions: data});
  41. App.UI.closeModal();
  42. })
  43. .catch(err => {
  44. this.ui.error.text(err.message).show();
  45. this.ui.buttons.prop('disabled', false).removeClass('btn-disabled');
  46. });
  47. }
  48. },
  49. templateContext: function () {
  50. let perms = this.model.get('permissions');
  51. let is_admin = this.model.isAdmin();
  52. return {
  53. getPerm: function (key) {
  54. if (perms !== null && typeof perms[key] !== 'undefined') {
  55. return perms[key];
  56. }
  57. return null;
  58. },
  59. getPermProps: function (key, item, forced_admin) {
  60. if (forced_admin && is_admin) {
  61. return 'checked disabled';
  62. } else if (is_admin) {
  63. return 'disabled';
  64. } else if (perms !== null && typeof perms[key] !== 'undefined' && perms[key] === item) {
  65. return 'checked';
  66. }
  67. return '';
  68. },
  69. isAdmin: function () {
  70. return is_admin;
  71. }
  72. };
  73. },
  74. initialize: function (options) {
  75. if (typeof options.model === 'undefined' || !options.model) {
  76. this.model = new UserModel.Model();
  77. }
  78. }
  79. });