Class: Permissionable::Permissions

Inherits:
Object
  • Object
show all
Defined in:
lib/permissionable/permissions.rb

Instance Method Summary collapse

Constructor Details

#initialize(owner) ⇒ Permissions

Returns a new instance of Permissions.



3
4
5
6
7
8
9
10
# File 'lib/permissionable/permissions.rb', line 3

def initialize(owner)
  @owner = owner
  if @owner.respond_to?(:read_attribute)
    @permission_integer = @owner.read_attribute(:permissions)
  else
    @permission_integer = 0
  end
end

Instance Method Details

#add(*permissions) ⇒ Object Also known as: <<

Add new permissions will safely ignore any permissions already granted Usage: MyModel.last.permissions.add(:write) MyModel.last.permissions.add(:write, :read)



21
22
23
24
25
26
27
28
29
# File 'lib/permissionable/permissions.rb', line 21

def add(*permissions)
  permissions.flatten!
  control_definitions(permissions)
  permissions.each do |permission|
    new_permission = defined_permissions[permission]
    @permission_integer += new_permission unless include?(permission)
  end
  sync_with_owner
end

#include?(*permissions) ⇒ TrueClass, FalseClass Also known as: []

Check if resource has permission Usage: resource.permissions.include?(:write) resource.permissions.include?(:write, :read)

Parameters:

  • *permissions (Array)

Returns:

  • (TrueClass, FalseClass)


52
53
54
55
56
57
58
59
# File 'lib/permissionable/permissions.rb', line 52

def include?(*permissions)
  permissions.flatten!
  control_definitions(permissions)
  # Sum the corresponding int value of all 
  # permissions provided in the argument list
  asserted = permissions.inject(0){ |mem, permission| mem + defined_permissions[permission] }
  @permission_integer & asserted == asserted
end

#remove(*permissions) ⇒ Object

Remove existing permissions will safely ignore any permissions not already granted Usage: resource.permissions.remove(:write) resource.permissions.remove(:write, :read)



37
38
39
40
41
42
43
44
# File 'lib/permissionable/permissions.rb', line 37

def remove(*permissions)
  permissions.flatten!
  control_definitions(permissions)
  permissions.each do |permission|
    @permission_integer -= defined_permissions[permission] if include?(permission)
  end
  sync_with_owner
end

#to_iObject



12
13
14
# File 'lib/permissionable/permissions.rb', line 12

def to_i
  @permission_integer
end