cancan-permits 0.3.5 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.markdown +40 -0
- data/VERSION +1 -1
- data/cancan-permits.gemspec +10 -8
- data/lib/cancan-permits/license/base_license.rb +1 -1
- data/lib/cancan-permits/loader/permissions_loader.rb +23 -3
- data/lib/cancan-permits/permit/base_permit.rb +22 -3
- data/lib/cancan-permits/permits/ability.rb +12 -4
- data/spec/cancan-permits/{license_loader → loader/config}/licenses.yml +0 -0
- data/spec/cancan-permits/{user_permissions_loader → loader/config}/user_permissions.yml +0 -0
- data/spec/cancan-permits/{license_loader → loader}/license_loader_spec.rb +3 -3
- data/spec/cancan-permits/loader/permits_loader_spec.rb +28 -0
- data/spec/cancan-permits/{user_permissions_loader → loader}/user_permissions_loader.rb +2 -2
- metadata +11 -9
data/README.markdown
CHANGED
@@ -96,6 +96,46 @@ class AdminPermit < Permit::Base
|
|
96
96
|
end
|
97
97
|
</code>
|
98
98
|
|
99
|
+
The call to #load_rules will call both #load_user_roles and #load_role_rules.
|
100
|
+
If you want you can call these methods individually, fx if you only want to apply one set of rules.
|
101
|
+
|
102
|
+
*Permit rules:*
|
103
|
+
- config/permits.yml
|
104
|
+
|
105
|
+
Each key at the top level is expected to match a permit/role name.
|
106
|
+
|
107
|
+
Example yml config file:
|
108
|
+
<code>
|
109
|
+
admin:
|
110
|
+
can:
|
111
|
+
manage:
|
112
|
+
- Article
|
113
|
+
- Post
|
114
|
+
guest:
|
115
|
+
can:
|
116
|
+
manage:
|
117
|
+
- all
|
118
|
+
cannot:
|
119
|
+
manage:
|
120
|
+
- User
|
121
|
+
</code>
|
122
|
+
|
123
|
+
Usage in a license
|
124
|
+
|
125
|
+
<code>
|
126
|
+
class GuestPermit < Permit::Base
|
127
|
+
def initialize(ability, options = {})
|
128
|
+
super
|
129
|
+
end
|
130
|
+
|
131
|
+
def permit?(user, options = {})
|
132
|
+
super
|
133
|
+
return if !role_match? user
|
134
|
+
can :manage, :all
|
135
|
+
load_rules user
|
136
|
+
end
|
137
|
+
end
|
138
|
+
</code>
|
99
139
|
|
100
140
|
*License permissions:*
|
101
141
|
- config/licenses.yml
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.6
|
data/cancan-permits.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{cancan-permits}
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kristian Mandrup"]
|
12
|
-
s.date = %q{2010-11-
|
12
|
+
s.date = %q{2010-11-30}
|
13
13
|
s.description = %q{Role specific Permits for use with CanCan permission system}
|
14
14
|
s.email = %q{kmandrup@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -62,10 +62,11 @@ Gem::Specification.new do |s|
|
|
62
62
|
"spec/active_record/owner_permits_spec.rb",
|
63
63
|
"spec/active_record/permits_spec.rb",
|
64
64
|
"spec/active_record/spec_helper.rb",
|
65
|
-
"spec/cancan-permits/
|
66
|
-
"spec/cancan-permits/
|
67
|
-
"spec/cancan-permits/
|
68
|
-
"spec/cancan-permits/
|
65
|
+
"spec/cancan-permits/loader/config/licenses.yml",
|
66
|
+
"spec/cancan-permits/loader/config/user_permissions.yml",
|
67
|
+
"spec/cancan-permits/loader/license_loader_spec.rb",
|
68
|
+
"spec/cancan-permits/loader/permits_loader_spec.rb",
|
69
|
+
"spec/cancan-permits/loader/user_permissions_loader.rb",
|
69
70
|
"spec/data_mapper/models/all_models.rb",
|
70
71
|
"spec/data_mapper/owner_permits_spec.rb",
|
71
72
|
"spec/data_mapper/permits_spec.rb",
|
@@ -118,8 +119,9 @@ Gem::Specification.new do |s|
|
|
118
119
|
"spec/active_record/owner_permits_spec.rb",
|
119
120
|
"spec/active_record/permits_spec.rb",
|
120
121
|
"spec/active_record/spec_helper.rb",
|
121
|
-
"spec/cancan-permits/
|
122
|
-
"spec/cancan-permits/
|
122
|
+
"spec/cancan-permits/loader/license_loader_spec.rb",
|
123
|
+
"spec/cancan-permits/loader/permits_loader_spec.rb",
|
124
|
+
"spec/cancan-permits/loader/user_permissions_loader.rb",
|
123
125
|
"spec/data_mapper/models/all_models.rb",
|
124
126
|
"spec/data_mapper/owner_permits_spec.rb",
|
125
127
|
"spec/data_mapper/permits_spec.rb",
|
@@ -16,7 +16,7 @@ module License
|
|
16
16
|
def load_rules name = nil
|
17
17
|
return if !licenses || licenses.empty?
|
18
18
|
|
19
|
-
name ||= self.class.to_s
|
19
|
+
name ||= self.class.to_s.gsub(/License$/, "").underscore.to_sym
|
20
20
|
|
21
21
|
licenses[name].can_statement do |permission_statement|
|
22
22
|
instance_eval permission_statement
|
@@ -6,7 +6,7 @@ class PermissionsLoader
|
|
6
6
|
begin
|
7
7
|
if file_name.nil? || !File.file?(file_name)
|
8
8
|
# raise ArgumentError, "PermissionsLoader Error: The permissions file #{file_name} could not be found"
|
9
|
-
puts "PermissionsLoader Error: The permissions file #{file_name} could not be found"
|
9
|
+
# puts "PermissionsLoader Error: The permissions file #{file_name} could not be found"
|
10
10
|
return nil
|
11
11
|
end
|
12
12
|
|
@@ -33,14 +33,34 @@ class PermissionsLoader
|
|
33
33
|
name ||= licenses_config_file
|
34
34
|
PermissionsLoader.new name
|
35
35
|
end
|
36
|
+
|
37
|
+
def self.load_permits name = nil
|
38
|
+
name ||= permits_config_file
|
39
|
+
PermissionsLoader.new name
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.permits_config_file
|
43
|
+
# raise '#user_permissions_config_file only works in a Rails app enviroment' if !defined? Rails
|
44
|
+
get_config_file 'permits'
|
45
|
+
end
|
36
46
|
|
37
47
|
def self.user_permissions_config_file
|
38
48
|
# raise '#user_permissions_config_file only works in a Rails app enviroment' if !defined? Rails
|
39
|
-
|
49
|
+
get_config_file 'user_permissions'
|
40
50
|
end
|
41
51
|
|
42
52
|
def self.licenses_config_file
|
43
53
|
# raise '#licenses_config_file only works in a Rails app enviroment' if !defined? Rails
|
44
|
-
|
54
|
+
get_config_file 'licenses'
|
55
|
+
end
|
56
|
+
|
57
|
+
protected
|
58
|
+
|
59
|
+
def self.get_config_file name
|
60
|
+
File.join(::Rails.root, 'config', "#{name}.yml") if rails?
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.rails?
|
64
|
+
defined?(Rails) && Rails.respond_to?(:root)
|
45
65
|
end
|
46
66
|
end
|
@@ -25,9 +25,27 @@ module Permit
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
def load_rules user
|
28
|
+
def load_rules user
|
29
|
+
load_role_rules
|
30
|
+
load_user_rules user
|
31
|
+
end
|
32
|
+
|
33
|
+
def load_role_rules
|
34
|
+
return if !role_permissions || role_permissions.empty?
|
35
|
+
name ||= self.class.to_s.gsub(/Permit$/, "").underscore.to_sym
|
36
|
+
|
37
|
+
role_permissions[name].can_statement do |permission_statement|
|
38
|
+
instance_eval permission_statement
|
39
|
+
end
|
40
|
+
|
41
|
+
role_permissions[name].cannot_statement do |permission_statement|
|
42
|
+
instance_eval permission_statement
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def load_user_rules user
|
29
47
|
return if !user_permissions || user_permissions.empty?
|
30
|
-
raise "#
|
48
|
+
raise "#load_user_rules expects the user to have an email property: #{user.inspect}" if !user || !user.respond_to?(:email)
|
31
49
|
|
32
50
|
id = user.email
|
33
51
|
return nil if id.strip.empty?
|
@@ -44,7 +62,8 @@ module Permit
|
|
44
62
|
def initialize ability, options = {}
|
45
63
|
@ability = ability
|
46
64
|
@strategy = options[:strategy] || Permits::Ability.strategy || :default
|
47
|
-
@user_permissions = ::PermissionsLoader.load_user_permissions options[:
|
65
|
+
@user_permissions = ::PermissionsLoader.load_user_permissions options[:user_permissions_file]
|
66
|
+
@role_permissions = ::PermissionsLoader.load_permits options[:permits_file]
|
48
67
|
end
|
49
68
|
|
50
69
|
def permit?(user, options = {})
|
@@ -59,14 +59,22 @@ module Permits
|
|
59
59
|
protected
|
60
60
|
|
61
61
|
include Permit::Util
|
62
|
+
|
63
|
+
def self.get_permit role
|
64
|
+
begin
|
65
|
+
clazz_name = "#{role.to_s.camelize}Permit"
|
66
|
+
clazz_name.constantize
|
67
|
+
rescue
|
68
|
+
raise "Permit #{clazz_name} not loaded and thus not defined"
|
69
|
+
end
|
70
|
+
end
|
62
71
|
|
63
72
|
def self.make_permit role, ability, options = {}
|
64
73
|
begin
|
65
|
-
|
66
|
-
permit_clazz = clazz_name.constantize
|
74
|
+
permit_clazz = get_permit role
|
67
75
|
permit_clazz.new(ability, options) if permit_clazz && permit_clazz.kind_of?(Class)
|
68
|
-
rescue
|
69
|
-
raise "Permit #{
|
76
|
+
rescue RuntimeError => e
|
77
|
+
raise "Error instantiating Permit instance for #{permit_clazz}, cause #{e}"
|
70
78
|
end
|
71
79
|
end
|
72
80
|
end
|
File without changes
|
File without changes
|
@@ -3,9 +3,9 @@ require 'cancan-permits'
|
|
3
3
|
|
4
4
|
DIR = File.dirname(__FILE__)
|
5
5
|
|
6
|
-
describe 'Load License
|
6
|
+
describe 'Load License rules' do
|
7
7
|
before :each do
|
8
|
-
@permissions_file = File.join(DIR, 'licenses.yml')
|
8
|
+
@permissions_file = File.join(DIR, 'config', 'licenses.yml')
|
9
9
|
end
|
10
10
|
|
11
11
|
it "should load a licenses permission file" do
|
@@ -19,7 +19,7 @@ describe 'Load License permissions' do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
it "should be able to instantiate a base permit without permission file" do
|
22
|
-
|
22
|
+
License::Base.new 'x'
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'rspec/core'
|
2
|
+
require 'cancan-permits'
|
3
|
+
|
4
|
+
DIR = File.dirname(__FILE__)
|
5
|
+
|
6
|
+
describe 'Load Permits rules' do
|
7
|
+
before :each do
|
8
|
+
@permission_file = File.join(DIR, 'config', 'permits.yml')
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should load a licenses permission file" do
|
12
|
+
loader = PermissionsLoader.new @permissions_file
|
13
|
+
# puts "loaded permissions #{loader.permissions}"
|
14
|
+
loader.permissions.should_not be_empty
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should be able to instantiate a base license with permission file" do
|
18
|
+
Permit::Base.new 'x', @permissions_file
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should be able to instantiate a base permit without permission file" do
|
22
|
+
Permit::Base.new 'x'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
|
@@ -5,7 +5,7 @@ DIR = File.dirname(__FILE__)
|
|
5
5
|
|
6
6
|
describe 'User Permissions Loader' do
|
7
7
|
before :each do
|
8
|
-
@permissions_file = File.join(DIR, 'user_permissions.yml')
|
8
|
+
@permissions_file = File.join(DIR, 'config', 'user_permissions.yml')
|
9
9
|
end
|
10
10
|
|
11
11
|
it "should load a user permissions file" do
|
@@ -15,7 +15,7 @@ describe 'User Permissions Loader' do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
it "should be able to instantiate a base permit with permission file" do
|
18
|
-
Permit::Base.new 'x', :
|
18
|
+
Permit::Base.new 'x', :user_permissions_file => @permissions_file
|
19
19
|
end
|
20
20
|
|
21
21
|
it "should be able to instantiate a base permit without permission file" do
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
version: 0.3.
|
8
|
+
- 6
|
9
|
+
version: 0.3.6
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Kristian Mandrup
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-11-
|
17
|
+
date: 2010-11-30 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -207,10 +207,11 @@ files:
|
|
207
207
|
- spec/active_record/owner_permits_spec.rb
|
208
208
|
- spec/active_record/permits_spec.rb
|
209
209
|
- spec/active_record/spec_helper.rb
|
210
|
-
- spec/cancan-permits/
|
211
|
-
- spec/cancan-permits/
|
212
|
-
- spec/cancan-permits/
|
213
|
-
- spec/cancan-permits/
|
210
|
+
- spec/cancan-permits/loader/config/licenses.yml
|
211
|
+
- spec/cancan-permits/loader/config/user_permissions.yml
|
212
|
+
- spec/cancan-permits/loader/license_loader_spec.rb
|
213
|
+
- spec/cancan-permits/loader/permits_loader_spec.rb
|
214
|
+
- spec/cancan-permits/loader/user_permissions_loader.rb
|
214
215
|
- spec/data_mapper/models/all_models.rb
|
215
216
|
- spec/data_mapper/owner_permits_spec.rb
|
216
217
|
- spec/data_mapper/permits_spec.rb
|
@@ -290,8 +291,9 @@ test_files:
|
|
290
291
|
- spec/active_record/owner_permits_spec.rb
|
291
292
|
- spec/active_record/permits_spec.rb
|
292
293
|
- spec/active_record/spec_helper.rb
|
293
|
-
- spec/cancan-permits/
|
294
|
-
- spec/cancan-permits/
|
294
|
+
- spec/cancan-permits/loader/license_loader_spec.rb
|
295
|
+
- spec/cancan-permits/loader/permits_loader_spec.rb
|
296
|
+
- spec/cancan-permits/loader/user_permissions_loader.rb
|
295
297
|
- spec/data_mapper/models/all_models.rb
|
296
298
|
- spec/data_mapper/owner_permits_spec.rb
|
297
299
|
- spec/data_mapper/permits_spec.rb
|