Module: CanDo
- Defined in:
- lib/cando.rb,
lib/models/role.rb,
lib/models/user.rb,
lib/models/capability.rb
Defined Under Namespace
Classes: Capability, ConfigCannotBlockError, ConfigMysqlConnectionError, ConfigMysqlDBError, DBNotConnected, Role, UndefinedRole, User
Class Method Summary
collapse
Instance Method Summary
collapse
Class Method Details
.cannot_block(&block) ⇒ Object
will be executed if ‘can(user_urn, :capability) { }` will not be executed due to missing capabilities
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/cando.rb', line 37
def self.cannot_block(&block)
if !block
raise ConfigCannotBlockError.new("CanDo#cannot_block expects block")
end
if block.arity != 2
raise ConfigCannotBlockError.new("CanDo#cannot_block expects block expecting two arguments |user_urn, capability|")
end
@@cannot_block_proc = block
end
|
.connect(connection) ⇒ Object
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# File 'lib/cando.rb', line 48
def self.connect(connection)
if connection =~ /sqlite/
raise ConfigMysqlDBError.new("sqlite is not supported as it misses certain constraints")
end
begin
@db = Sequel.connect(connection)
@db.test_connection
@db
rescue => e
raise ConfigMysqlConnectionError.new(<<-EOF
Error connecting to database. Be sure to pass in a databse config like 'mysql://user:passwd@host/database':
#{e.message}
EOF
)
end
end
|
.db ⇒ Object
14
15
16
|
# File 'lib/cando.rb', line 14
def self.db
@db or raise DBNotConnected.new("CanDo is not connected to a database")
end
|
.init(&block) ⇒ Object
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/cando.rb', line 18
def self.init(&block)
CanDo.instance_eval &block
begin
Sequel::Model.db.test_connection
rescue ::Sequel::Error => e
raise DBNotConnected.new("No database connection established. Have you called 'connect' within the 'CanDo.init' block? Sequel error message is:\n#{e.message}")
end
Dir.glob(File.expand_path("#{__FILE__}/../models/*.rb")).each do |model|
require_relative model
end
Sequel::Model.db
end
|
Instance Method Details
#assign_roles(user, roles) ⇒ Object
85
86
87
|
# File 'lib/cando.rb', line 85
def assign_roles(user, roles)
CanDo::User.find_or_create(:id => user).assign_roles(roles)
end
|
#can(user_urn, capability) ⇒ Object
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
# File 'lib/cando.rb', line 66
def can(user_urn, capability)
user = CanDo::User.find(:id => user_urn)
has_permission = user && user.can(capability)
if block_given?
if has_permission
return yield
end
if @@cannot_block_proc
self.instance_exec user_urn, capability, &@@cannot_block_proc
end
end
has_permission
end
|
#capabilities(user) ⇒ Object
96
97
98
99
100
101
|
# File 'lib/cando.rb', line 96
def capabilities(user)
user = CanDo::User.first(:id => user)
return [] unless user
user.capabilities.map{|x| x.to_sym }
end
|
#define_role(role, capabilities) ⇒ Object
81
82
83
|
# File 'lib/cando.rb', line 81
def define_role(role, capabilities)
CanDo::Role.define_role(role, capabilities)
end
|
#roles(user) ⇒ Object
89
90
91
92
93
94
|
# File 'lib/cando.rb', line 89
def roles(user)
user = CanDo::User.first(:id => user)
return [] unless user
user.roles.map(&:id)
end
|