Module: EasyAdmin::Permissions::Component
- Extended by:
- ActiveSupport::Concern
- Included in:
- BaseComponent
- Defined in:
- lib/easy_admin/permissions/component.rb
Defined Under Namespace
Classes: PermissionCaseBuilder
Instance Method Summary collapse
-
#current_user_can?(permission_name, context: nil) ⇒ Boolean
Check if current user has permission.
-
#current_user_has_role?(role_name, context: nil) ⇒ Boolean
Check if current user has role.
-
#if_can(permission_name, context: nil, &block) ⇒ Object
Render content only if user has permission.
-
#if_has_role(role_name, context: nil, &block) ⇒ Object
Render content only if user has role.
-
#permission_attrs(permission_name, enabled_attrs: {}, disabled_attrs: {}, context: nil) ⇒ Object
Conditional attributes based on permissions.
-
#permission_button(text = nil, permission_name:, context: nil, disabled_class: "opacity-50 cursor-not-allowed", **attrs, &block) ⇒ Object
Generate button with permission check.
-
#permission_case(context: nil, &block) ⇒ Object
Show different content based on multiple permission checks.
-
#permission_classes(permission_name, enabled_classes: "", disabled_classes: "opacity-50 cursor-not-allowed", context: nil) ⇒ Object
Conditional CSS classes based on permissions.
-
#permission_field(permission_name, context: nil, readonly_class: "bg-gray-100", &block) ⇒ Object
Render form field only if user can edit.
-
#permission_link(text, href, permission_name, context: nil, **attrs, &block) ⇒ Object
Generate link with permission check.
-
#unless_can(permission_name, context: nil, &block) ⇒ Object
Render content if user DOESN’T have permission.
-
#unless_has_role(role_name, context: nil, &block) ⇒ Object
Render content if user DOESN’T have role.
Instance Method Details
#current_user_can?(permission_name, context: nil) ⇒ Boolean
Check if current user has permission
7 8 9 10 |
# File 'lib/easy_admin/permissions/component.rb', line 7 def current_user_can?(, context: nil) current_user = helpers.current_user if helpers.respond_to?(:current_user) EasyAdmin::Permissions.(current_user, , context: context) end |
#current_user_has_role?(role_name, context: nil) ⇒ Boolean
Check if current user has role
13 14 15 16 |
# File 'lib/easy_admin/permissions/component.rb', line 13 def current_user_has_role?(role_name, context: nil) current_user = helpers.current_user if helpers.respond_to?(:current_user) EasyAdmin::Permissions.has_role?(current_user, role_name, context: context) end |
#if_can(permission_name, context: nil, &block) ⇒ Object
Render content only if user has permission
19 20 21 22 23 |
# File 'lib/easy_admin/permissions/component.rb', line 19 def if_can(, context: nil, &block) if current_user_can?(, context: context) block.call if block_given? end end |
#if_has_role(role_name, context: nil, &block) ⇒ Object
Render content only if user has role
26 27 28 29 30 |
# File 'lib/easy_admin/permissions/component.rb', line 26 def if_has_role(role_name, context: nil, &block) if current_user_has_role?(role_name, context: context) block.call if block_given? end end |
#permission_attrs(permission_name, enabled_attrs: {}, disabled_attrs: {}, context: nil) ⇒ Object
Conditional attributes based on permissions
56 57 58 59 60 61 62 |
# File 'lib/easy_admin/permissions/component.rb', line 56 def (, enabled_attrs: {}, disabled_attrs: {}, context: nil) if current_user_can?(, context: context) enabled_attrs else disabled_attrs end end |
#permission_button(text = nil, permission_name:, context: nil, disabled_class: "opacity-50 cursor-not-allowed", **attrs, &block) ⇒ Object
Generate button with permission check
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/easy_admin/permissions/component.rb', line 86 def (text = nil, permission_name:, context: nil, disabled_class: "opacity-50 cursor-not-allowed", **attrs, &block) can_access = current_user_can?(, context: context) = attrs.dup [:disabled] = true unless can_access [:class] = [[:class], disabled_class].compact.join(" ") unless can_access (**) do if block_given? block.call elsif text text end end end |
#permission_case(context: nil, &block) ⇒ Object
Show different content based on multiple permission checks
117 118 119 120 121 |
# File 'lib/easy_admin/permissions/component.rb', line 117 def (context: nil, &block) = PermissionCaseBuilder.new(self, context) .instance_eval(&block) if block_given? .render end |
#permission_classes(permission_name, enabled_classes: "", disabled_classes: "opacity-50 cursor-not-allowed", context: nil) ⇒ Object
Conditional CSS classes based on permissions
47 48 49 50 51 52 53 |
# File 'lib/easy_admin/permissions/component.rb', line 47 def (, enabled_classes: "", disabled_classes: "opacity-50 cursor-not-allowed", context: nil) if current_user_can?(, context: context) enabled_classes else disabled_classes end end |
#permission_field(permission_name, context: nil, readonly_class: "bg-gray-100", &block) ⇒ Object
Render form field only if user can edit
103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/easy_admin/permissions/component.rb', line 103 def (, context: nil, readonly_class: "bg-gray-100", &block) can_edit = current_user_can?(, context: context) if can_edit block.call if block_given? else # Render read-only version div(class: readonly_class) do block.call if block_given? end end end |
#permission_link(text, href, permission_name, context: nil, **attrs, &block) ⇒ Object
Generate link with permission check
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/easy_admin/permissions/component.rb', line 65 def (text, href, , context: nil, **attrs, &block) if current_user_can?(, context: context) a(href: href, **attrs) do if block_given? block.call else text end end else span(class: "text-gray-400 cursor-not-allowed", **attrs.except(:href, :data)) do if block_given? block.call else text end end end end |
#unless_can(permission_name, context: nil, &block) ⇒ Object
Render content if user DOESN’T have permission
33 34 35 36 37 |
# File 'lib/easy_admin/permissions/component.rb', line 33 def unless_can(, context: nil, &block) unless current_user_can?(, context: context) block.call if block_given? end end |
#unless_has_role(role_name, context: nil, &block) ⇒ Object
Render content if user DOESN’T have role
40 41 42 43 44 |
# File 'lib/easy_admin/permissions/component.rb', line 40 def unless_has_role(role_name, context: nil, &block) unless current_user_has_role?(role_name, context: context) block.call if block_given? end end |