class Controlist::Permissions::OrderedPackage

Attributes

list_create[R]
list_delete[R]
list_read[R]
list_update[R]
permissions[R]

Public Class Methods

new(*permissions) click to toggle source
# File lib/controlist/permissions/ordered_package.rb, line 8
def initialize(*permissions)
  permissions.compact!
  @list_create = {}
  @list_read = {}
  @list_update = {}
  @list_delete = {}
  @permissions = permissions
  @permissions.freeze # avoid bypassing add_permissions/remove_permissions
  add_permissions *permissions
end

Public Instance Methods

add_permissions(*permissions) click to toggle source
# File lib/controlist/permissions/ordered_package.rb, line 19
def add_permissions(*permissions)
  @permissions += permissions
  @permissions.freeze
  permissions.each do |permission|
    operations = permission.operations
    add @list_create, permission if operations.nil? || operations.include?(CREATE)
    add @list_read, permission if operations.nil? ||  operations.include?(READ)
    add @list_update, permission if operations.nil? ||  operations.include?(UPDATE)
    add @list_delete, permission if operations.nil? ||  operations.include?(DELETE)
  end
end
has_permission(klass, operation) click to toggle source
# File lib/controlist/permissions/ordered_package.rb, line 43
def has_permission(klass, operation)
  permission_list = instance_variable_get("@list_#{operation}")
  if permission_list && (permissions = permission_list[klass])
    permissions.any?(&:is_allowed)
  end
end
remove_permissions(*permissions) click to toggle source
# File lib/controlist/permissions/ordered_package.rb, line 31
def remove_permissions(*permissions)
  @permissions -= permissions
  @permissions.freeze
  permissions.each do |permission|
    operations = permission.operations
    remove @list_create, permission if operations.nil? || operations.include?(CREATE)
    remove @list_read, permission if operations.nil? ||  operations.include?(READ)
    remove @list_update, permission if operations.nil? ||  operations.include?(UPDATE)
    remove @list_delete, permission if operations.nil? ||  operations.include?(DELETE)
  end
end

Private Instance Methods

add(list, permission) click to toggle source
# File lib/controlist/permissions/ordered_package.rb, line 52
def add(list, permission)
  (list[permission.klass] ||= []) << permission
end
remove(list, permission) click to toggle source
# File lib/controlist/permissions/ordered_package.rb, line 56
def remove(list, permission)
  (list[permission.klass] ||= []).delete permission
end