Class: Toni

Inherits:
Object
  • Object
show all
Defined in:
lib/toni.rb,
lib/toni/role.rb,
lib/toni/builder.rb,
lib/toni/version.rb,
lib/toni/permission.rb,
lib/toni/anonymous_user.rb,
lib/toni/permission_matcher.rb

Defined Under Namespace

Classes: AnonymousUser, Builder, InvalidCurrentUserError, NoAuthorizationContextProvidedError, NoMethodForMatcherError, NotAuthorizedError, Permission, PermissionMatcher, Role

Constant Summary collapse

AUTH_FILE =
File.dirname(__FILE__) + "/authorization_rules.rb"
VERSION =
"0.0.1"
@@without_authorization =
false

Class Method Summary collapse

Class Method Details

.current_rolesObject



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

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

.current_userObject



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

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

.current_user=(user) ⇒ Object



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

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)


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

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.inspect} is not allowed to #{activity} on #{resource_or_name.inspect}")
  end

  permitted
end

.rolesObject



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

def roles
  @@roles ||= build
end

.without_authorization(&block) ⇒ Object



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

def without_authorization(&block)
  @@without_authorization = true
  yield if block_given?
  @@without_authorization = false
end