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



64
65
66
67
# File 'lib/spree/core/permission_configuration.rb', line 64

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



73
74
75
76
# File 'lib/spree/core/permission_configuration.rb', line 73

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)



82
83
84
# File 'lib/spree/core/permission_configuration.rb', line 82

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.



104
105
106
# File 'lib/spree/core/permission_configuration.rb', line 104

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)


97
98
99
100
# File 'lib/spree/core/permission_configuration.rb', line 97

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



89
90
91
# File 'lib/spree/core/permission_configuration.rb', line 89

def roles
  @role_permissions.keys
end

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

Removes specific permission set(s) from a role.

Parameters:

  • role_name (Symbol, String)

    the name of the role

  • permission_sets (Array<Class>, Class)

    permission set class(es) to remove

Returns:

  • (Array<Class>)

    the remaining permission sets



53
54
55
56
57
58
# File 'lib/spree/core/permission_configuration.rb', line 53

def unassign(role_name, permission_sets)
  role_key = normalize_role_name(role_name)
  return [] unless @role_permissions[role_key]

  @role_permissions[role_key] -= Array(permission_sets)
end