backend.rb 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. class ObjectManager::Element::Backend
  3. attr_reader :user, :attribute, :record
  4. def initialize(user:, attribute:, record:)
  5. @user = user
  6. @attribute = attribute
  7. @record = record
  8. end
  9. def visible?
  10. return true if attribute.data_option[:permission].blank?
  11. return false if user.blank?
  12. attribute.data_option[:permission].any? do |permission|
  13. authorized?(permission)
  14. end
  15. end
  16. def authorized?(permission)
  17. user.permissions?(permission)
  18. end
  19. def data
  20. data = default_data
  21. data[:screen] = screens if attribute.screens.present?
  22. return data if attribute.data_option.blank?
  23. data.merge(attribute.data_option.symbolize_keys)
  24. end
  25. def default_data
  26. {
  27. name: attribute.name,
  28. display: attribute.display,
  29. tag: attribute.data_type,
  30. # :null => attribute.null,
  31. }
  32. end
  33. def screens
  34. @screens ||= attribute.screens.transform_values do |permission_options|
  35. screen_value(permission_options)
  36. end
  37. end
  38. def screen_value(permission_options)
  39. return permission_options['-all-'] if permission_options['-all-']
  40. return {} if user.blank?
  41. screen_permission_options(permission_options)
  42. end
  43. def screen_permission_options(permission_options)
  44. booleans = [true, false]
  45. permission_options.each_with_object({}) do |(permission, options), result|
  46. next if !authorized?(permission)
  47. options.each do |key, value|
  48. next if booleans.include?(result[key]) && !value
  49. result[key] = value
  50. end
  51. end
  52. end
  53. end