permissions.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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. streams: 'manage',
  30. certificates: 'manage'
  31. });
  32. }
  33. this.ui.buttons.prop('disabled', true).addClass('btn-disabled');
  34. App.Api.Users.setPermissions(view.model.get('id'), data)
  35. .then(() => {
  36. if (view.model.get('id') === App.Cache.User.get('id')) {
  37. App.Cache.User.set({permissions: data});
  38. }
  39. view.model.set({permissions: data});
  40. App.UI.closeModal();
  41. })
  42. .catch(err => {
  43. this.ui.error.text(err.message).show();
  44. this.ui.buttons.prop('disabled', false).removeClass('btn-disabled');
  45. });
  46. }
  47. },
  48. templateContext: function () {
  49. let perms = this.model.get('permissions');
  50. let is_admin = this.model.isAdmin();
  51. return {
  52. getPerm: function (key) {
  53. if (perms !== null && typeof perms[key] !== 'undefined') {
  54. return perms[key];
  55. }
  56. return null;
  57. },
  58. getPermProps: function (key, item, forced_admin) {
  59. if (forced_admin && is_admin) {
  60. return 'checked disabled';
  61. } else if (is_admin) {
  62. return 'disabled';
  63. } else if (perms !== null && typeof perms[key] !== 'undefined' && perms[key] === item) {
  64. return 'checked';
  65. }
  66. return '';
  67. },
  68. isAdmin: function () {
  69. return is_admin;
  70. }
  71. };
  72. },
  73. initialize: function (options) {
  74. if (typeof options.model === 'undefined' || !options.model) {
  75. this.model = new UserModel.Model();
  76. }
  77. }
  78. });