Module: Toni

Defined in:
lib/toni.rb,
lib/toni/role.rb,
lib/toni/builder.rb,
lib/toni/sinatra.rb,
lib/toni/version.rb,
lib/toni/permission.rb,
lib/toni/rspec_helper.rb,
lib/toni/anonymous_user.rb,
lib/toni/permission_matcher.rb

Defined Under Namespace

Modules: RSpecHelper, Sinatra Classes: AnonymousUser, Builder, InvalidCurrentUserError, MissingMatcherError, NoAuthorizationContextProvidedError, NoMethodForMatcherError, NotAuthorizedError, Permission, PermissionMatcher, Role

Constant Summary collapse

AUTH_FILE =
"config/authorization_rules.rb"
VERSION =
"0.0.2"

Class Method Summary collapse

Class Method Details

.current_rolesObject



39
40
41
# File 'lib/toni.rb', line 39

def current_roles
  roles.select { |role_symbol, r| current_user.role_symbols.include?(role_symbol) }.values
end

.current_userObject



15
16
17
18
# File 'lib/toni.rb', line 15

def current_user
  @curent_user ||= nil
  @curent_user || anonymous_user
end

.current_user=(user) ⇒ Object



20
21
22
23
# File 'lib/toni.rb', line 20

def current_user=(user)
  raise InvalidCurrentUserError if !user.nil? && !user.respond_to?(:role_symbols)
  @curent_user = user
end

.permitted_to?(activity, resource_or_name, options = {}) ⇒ Boolean

Returns:

  • (Boolean)


29
30
31
32
33
34
35
36
37
# File 'lib/toni.rb', line 29

def permitted_to?(activity, resource_or_name, options={})
  return true if @without_authorization
  permitted = current_roles.any?{ |r| r.permitted_to?(activity, resource_or_name, options) }
  if options[:bang] && !permitted
    raise NotAuthorizedError.new("#{current_user.to_s} with #{current_user.role_symbols.inspect} is not allowed to #{activity} on #{resource_or_name.inspect}")
  end

  permitted
end

.rolesObject



25
26
27
# File 'lib/toni.rb', line 25

def roles
  @roles ||= build
end

.without_authorization(&block) ⇒ Object



43
44
45
46
47
48
# File 'lib/toni.rb', line 43

def without_authorization(&block)
  @without_authorization = true
  result = block_given? ? yield : nil
  @without_authorization = false
  result
end