You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
1.9 KiB

  1. 'use strict'
  2. /* global usrData */
  3. import $ from 'jquery'
  4. import _ from 'lodash'
  5. import Vue from 'vue'
  6. module.exports = (alerts) => {
  7. if ($('#page-type-admin-users-edit').length) {
  8. let vueEditUser = new Vue({
  9. el: '#page-type-admin-users-edit',
  10. data: {
  11. id: '',
  12. email: '',
  13. password: '********',
  14. name: '',
  15. rights: [],
  16. roleoverride: 'none'
  17. },
  18. methods: {
  19. addRightsRow: (ev) => {
  20. vueEditUser.rights.push({
  21. role: 'write',
  22. path: '/',
  23. exact: false,
  24. deny: false
  25. })
  26. },
  27. removeRightsRow: (idx) => {
  28. _.pullAt(vueEditUser.rights, idx)
  29. vueEditUser.$forceUpdate()
  30. },
  31. saveUser: (ev) => {
  32. let formattedRights = _.cloneDeep(vueEditUser.rights)
  33. switch (vueEditUser.roleoverride) {
  34. case 'admin':
  35. formattedRights.push({
  36. role: 'admin',
  37. path: '/',
  38. exact: false,
  39. deny: false
  40. })
  41. break
  42. }
  43. $.post(window.location.href, {
  44. password: vueEditUser.password,
  45. name: vueEditUser.name,
  46. rights: JSON.stringify(formattedRights)
  47. }).done((resp) => {
  48. alerts.pushSuccess('Saved successfully', 'Changes have been applied.')
  49. }).fail((jqXHR, txtStatus, resp) => {
  50. alerts.pushError('Error', resp)
  51. })
  52. }
  53. },
  54. created: function () {
  55. this.id = usrData._id
  56. this.email = usrData.email
  57. this.name = usrData.name
  58. if (_.find(usrData.rights, { role: 'admin' })) {
  59. this.rights = _.reject(usrData.rights, ['role', 'admin'])
  60. this.roleoverride = 'admin'
  61. } else {
  62. this.rights = usrData.rights
  63. }
  64. }
  65. })
  66. require('../modals/admin-users-delete.js')(alerts)
  67. }
  68. }