Sha256: f463ac6ad6a1581c313492457f0e3da551028cd25793fdfb90c3043bb2f4f434
Contents?: true
Size: 1.43 KB
Versions: 4
Compression:
Stored size: 1.43 KB
Contents
require "ingress/permissions_repository" module Ingress class PermissionsDsl attr_reader :role_identifier, :permission_repository def initialize(role_identifier) @role_identifier = role_identifier @permission_repository = PermissionsRepository.new end def can_do_anything permission_repository.add_permission(role_identifier, true, "*", "*") end def can(actions, subjects, options = {}, &block) for_each_action_and_subject(actions, subjects) do |action, subject| condition = condition_from_options(options, block) permission_repository.add_permission(role_identifier, true, action, subject, condition) end end def cannot(actions, subjects, options = {}, &block) for_each_action_and_subject(actions, subjects) do |action, subject| condition = condition_from_options(options, block) permission_repository.add_permission(role_identifier, false, action, subject, condition) end end private def for_each_action_and_subject(actions, subjects) return unless block_given? actions = [actions].flatten subjects = [subjects].flatten actions.each do |action| subjects.each do |subject| yield(action, subject) end end end def condition_from_options(options, block) if_condition = options[:if] || block if_condition.respond_to?(:call) ? if_condition : nil end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
ingress-0.4.0 | lib/ingress/permissions_dsl.rb |
ingress-0.3.0 | lib/ingress/permissions_dsl.rb |
ingress-0.2.0 | lib/ingress/permissions_dsl.rb |
ingress-0.1.0 | lib/ingress/permissions_dsl.rb |