Class: Spree::PermissionConfiguration

Inherits:
Object
  • Object
show all
Defined in:
lib/spree/core/permission_configuration.rb

Constant Summary collapse

DEFAULT_ROLE =

Default role used for unauthenticated users

:default
ADMIN_ROLE =

Admin role with full access

:admin

Instance Method Summary collapse

Constructor Details

#initializePermissionConfiguration

Returns a new instance of PermissionConfiguration.



27
28
29
# File 'lib/spree/core/permission_configuration.rb', line 27

def initialize
  @role_permissions = {}
end

Instance Method Details

#assign(role_name, permission_sets) ⇒ Array<Class>

Assigns permission sets to a role.

Examples:

Spree.permissions.assign(:customer_service, Spree::PermissionSets::OrderDisplay)
Spree.permissions.assign(:admin, [
  Spree::PermissionSets::SuperUser
])

Parameters:

  • role_name (Symbol, String)

    the name of the role

  • permission_sets (Array<Class>, Class)

    permission set class(es) to assign

Returns:

  • (Array<Class>)

    the assigned permission sets



42
43
44
45
46
# File 'lib/spree/core/permission_configuration.rb', line 42

def assign(role_name, permission_sets)
  role_key = normalize_role_name(role_name)
  @role_permissions[role_key] ||= []
  @role_permissions[role_key] |= Array(permission_sets)
end

#clear(role_name) ⇒ Array<Class>

Clears all permission sets from a role.

Parameters:

  • role_name (Symbol, String)

    the name of the role

Returns:

  • (Array<Class>)

    the removed permission sets



52
53
54
55
# File 'lib/spree/core/permission_configuration.rb', line 52

def clear(role_name)
  role_key = normalize_role_name(role_name)
  @role_permissions.delete(role_key)
end

#permission_sets_for(role_name) ⇒ Array<Class>

Returns the permission sets assigned to a role.

Parameters:

  • role_name (Symbol, String)

    the name of the role

Returns:

  • (Array<Class>)

    the assigned permission sets



61
62
63
64
# File 'lib/spree/core/permission_configuration.rb', line 61

def permission_sets_for(role_name)
  role_key = normalize_role_name(role_name)
  @role_permissions[role_key] || []
end

#permission_sets_for_roles(role_names) ⇒ Array<Class>

Returns all permission sets for multiple roles.

Parameters:

  • role_names (Array<Symbol, String>)

    the names of the roles

Returns:

  • (Array<Class>)

    the combined permission sets (deduplicated)



70
71
72
# File 'lib/spree/core/permission_configuration.rb', line 70

def permission_sets_for_roles(role_names)
  role_names.flat_map { |role_name| permission_sets_for(role_name) }.uniq
end

#reset!Object

Resets all role permissions to empty state. Useful for testing.



92
93
94
# File 'lib/spree/core/permission_configuration.rb', line 92

def reset!
  @role_permissions = {}
end

#role_configured?(role_name) ⇒ Boolean

Checks if a role has any permission sets assigned.

Parameters:

  • role_name (Symbol, String)

    the name of the role

Returns:

  • (Boolean)


85
86
87
88
# File 'lib/spree/core/permission_configuration.rb', line 85

def role_configured?(role_name)
  role_key = normalize_role_name(role_name)
  @role_permissions.key?(role_key) && @role_permissions[role_key].any?
end

#rolesArray<Symbol>

Returns all configured roles.

Returns:

  • (Array<Symbol>)

    the configured role names



77
78
79
# File 'lib/spree/core/permission_configuration.rb', line 77

def roles
  @role_permissions.keys
end