class Fib::PermissionsCollection

Attributes

container[RW]
package[R]
permissions[R]

Public Class Methods

build_by_permissions(permissions) click to toggle source
# File lib/fib/permissions_collection.rb, line 129
def build_by_permissions permissions
  return unless permissions.is_a? Array
  new.tap { |p| p.append(*permissions) }
end
new() click to toggle source
# File lib/fib/permissions_collection.rb, line 11
def initialize
  @permissions = {}
  @package = Fib::ElementPackage.new
end

Public Instance Methods

&(permission_collection) click to toggle source
# File lib/fib/permissions_collection.rb, line 72
def & permission_collection
  raise ParameterIsNotValid, "must be permission_collection" unless permission_collection.is_a?(Fib::PermissionsCollection)

  current_permission_values = permissions.values
  build_new { append *(current_permission_values & permission_collection.permissions.values).flatten }
end
+(permission_collection) click to toggle source
# File lib/fib/permissions_collection.rb, line 56
def + permission_collection
  raise ParameterIsNotValid, "must be permission_collection" unless permission_collection.is_a?(Fib::PermissionsCollection)

  current_permission_values = permissions.values
  build_new { append *(current_permission_values | permission_collection.permissions.values).flatten }
end
Also aliased as: |
-(permission_collection) click to toggle source
# File lib/fib/permissions_collection.rb, line 65
def - permission_collection
  raise ParameterIsNotValid, "must be permission_collection" unless permission_collection.is_a?(Fib::PermissionsCollection)

  current_permission_values = permissions.values
  build_new { append *(current_permission_values - permission_collection.permissions.values).flatten }
end
<<(permission)
Alias for: set
add(key, name="", options={}) click to toggle source
# File lib/fib/permissions_collection.rb, line 91
def add key, name="", options={}, &block
  return unless key.present?

  keys = [options[:key] || []].flatten
  urls = [options[:url] || []].flatten
  bind = [options[:bind] || []].flatten
  actions = options[:action] || []
  display = options[:display] if options.key? :display

  # 构建权限对象
  permission = Fib::Permission.new key, name: name

  # 默认创建一个与permission key相同的element key类型
  permission.append Fib::Element.create_key key
  permission.append keys.map{ |k| Fib::Element.create_key k }

  permission.append urls.map{ |u| Fib::Element.create_url u }
  permission.append actions.map{ |a|
    controller = a.shift
    a.map { |action| Fib::Element.create_action controller, action }
  }.flatten

  permission.bind_permission bind
  display ? permission.display_on : permission.display_off unless display.nil?

  # 执行自定义闭包
  permission.instance_exec &block if block_given?

  # 设置elements所属permission
  permission.inject_elements_permission
  permission.container = container

  # 将该权限放入集合
  set permission
end
append(*permissions)
Alias for: mset
build_new(&block) click to toggle source
# File lib/fib/permissions_collection.rb, line 87
def build_new &block
  self.class.new.tap { |n| n.instance_exec(&block) if block_given? }
end
build_package() click to toggle source
# File lib/fib/permissions_collection.rb, line 52
def build_package
  @package = Fib::ElementPackage.merge *permission_packages
end
empty?() click to toggle source
# File lib/fib/permissions_collection.rb, line 44
def empty?
  permissions.keys.size == 0
end
extract_by_keys(keys) click to toggle source
# File lib/fib/permissions_collection.rb, line 79
def extract_by_keys keys
  Fib::PermissionsCollection.build_by_permissions select_permissions_by_keys(keys)
end
keys() click to toggle source
# File lib/fib/permissions_collection.rb, line 21
def keys
  permissions.keys
end
mset(*permissions) click to toggle source
# File lib/fib/permissions_collection.rb, line 34
def mset *permissions
  permissions.flatten.each do |p|
    next unless p.is_a?(Fib::Permission)
    @permissions[p.key] = p
  end
  build_package
end
Also aliased as: append
permission_packages() click to toggle source
# File lib/fib/permissions_collection.rb, line 48
def permission_packages
  (permissions.values.map(&:package) + permissions.values.map(&:bind_packages)).flatten.uniq
end
permissions_info() click to toggle source
# File lib/fib/permissions_collection.rb, line 16
def permissions_info
  permissions.values.select { |v| v.display }
    .map { |v| [v.key, v.name] }
end
select_permissions_by_keys(keys) click to toggle source
# File lib/fib/permissions_collection.rb, line 83
def select_permissions_by_keys keys
  permissions.select { |k, v| keys.include? k }.values
end
set(permission) click to toggle source
# File lib/fib/permissions_collection.rb, line 25
def set permission
  raise ParameterIsNotValid, "set method can't accept expect permission object" unless permission.is_a?(Fib::Permission)
  raise ParameterIsNotValid, "permission key #{permission.key} is exist" if permissions.has_key? permission.key

  mset permission
end
Also aliased as: <<
|(permission_collection)
Alias for: +