class Permissionable::Permissions
Public Class Methods
new(owner)
click to toggle source
# File lib/permissionable/permissions.rb, line 3 def initialize(owner) @owner = owner if @owner.respond_to?(:read_attribute) @permissions_integer = @owner.read_attribute(:permissions_integer) else @permissions_integer = 0 end end
Public Instance Methods
add(*permissions)
click to toggle source
Add new permissions will safely ignore any permissions already granted Usage: MyModel.last.permissions.add(:write) MyModel.last.permissions.add(:write, :read)
# File lib/permissionable/permissions.rb, line 21 def add(*permissions) permissions.flatten! control_definitions(permissions) permissions.each do |permission| new_permission = defined_permissions[permission] @permissions_integer += new_permission unless include?(permission) end sync_with_owner end
Also aliased as: <<
clear!()
click to toggle source
# File lib/permissionable/permissions.rb, line 62 def clear! @permissions_integer = 0 sync_with_owner end
include?(*permissions)
click to toggle source
Check if resource has permission Usage: resource.permissions.include?(:write) resource.permissions.include?(:write, :read) @param *permissions [Array] @return [TrueClass, FalseClass]
# 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] } @permissions_integer & asserted == asserted end
Also aliased as: []
remove(*permissions)
click to toggle source
Remove existing permissions will safely ignore any permissions not already granted Usage: resource.permissions.remove(:write) resource.permissions.remove(:write, :read)
# File lib/permissionable/permissions.rb, line 37 def remove(*permissions) permissions.flatten! control_definitions(permissions) permissions.each do |permission| @permissions_integer -= defined_permissions[permission] if include?(permission) end sync_with_owner end
to_i()
click to toggle source
# File lib/permissionable/permissions.rb, line 12 def to_i @permissions_integer end
Private Instance Methods
control_definitions(permissions)
click to toggle source
# File lib/permissionable/permissions.rb, line 69 def control_definitions(permissions) permissions.each do |permission| raise "Permission #{permission} not defined" if defined_permissions[permission].nil? end end
defined_permissions()
click to toggle source
# File lib/permissionable/permissions.rb, line 86 def defined_permissions @owner.class.get_permissions end
sync_with_owner()
click to toggle source
# File lib/permissionable/permissions.rb, line 75 def sync_with_owner if @owner.respond_to?(:permissions_integer=) @owner.permissions_integer = @permissions_integer end if @owner.respond_to?(:update_column) if @owner.respond_to?(:persisted?) && @owner.persisted? @owner.update_column(:permissions_integer, @permissions_integer) end end end