cantango-roles 0.1.0
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/.document +5 -0
- data/.rspec +1 -0
- data/Gemfile +36 -0
- data/Gemfile.lock +147 -0
- data/LICENSE.txt +20 -0
- data/README.mdown +83 -0
- data/Rakefile +53 -0
- data/VERSION +1 -0
- data/lib/cantango/roles.rb +11 -0
- data/lib/cantango/roles_ext.rb +9 -0
- data/lib/cantango/roles_ext/ability.rb +7 -0
- data/lib/cantango/roles_ext/ability/helper.rb +7 -0
- data/lib/cantango/roles_ext/ability/helper/role.rb +17 -0
- data/lib/cantango/roles_ext/ability/helper/role_group.rb +17 -0
- data/lib/cantango/roles_ext/builder.rb +7 -0
- data/lib/cantango/roles_ext/builder/permit.rb +7 -0
- data/lib/cantango/roles_ext/builder/permit/role.rb +35 -0
- data/lib/cantango/roles_ext/builder/permit/role_group.rb +61 -0
- data/lib/cantango/roles_ext/configuration.rb +13 -0
- data/lib/cantango/roles_ext/configuration/registry/role.rb +34 -0
- data/lib/cantango/roles_ext/configuration/role_groups.rb +17 -0
- data/lib/cantango/roles_ext/configuration/roles.rb +16 -0
- data/lib/cantango/roles_ext/configuration/system.rb +43 -0
- data/lib/cantango/roles_ext/engine.rb +7 -0
- data/lib/cantango/roles_ext/engine/permits.rb +5 -0
- data/lib/cantango/roles_ext/filter.rb +7 -0
- data/lib/cantango/roles_ext/filter/role.rb +29 -0
- data/lib/cantango/roles_ext/filter/role_group.rb +28 -0
- data/lib/cantango/roles_ext/helpers.rb +7 -0
- data/lib/cantango/roles_ext/helpers/role.rb +14 -0
- data/lib/cantango/roles_ext/helpers/role_group.rb +14 -0
- data/lib/cantango/roles_ext/permit.rb +0 -0
- data/lib/cantango/roles_ext/permit/helper/role_matcher.rb +13 -0
- data/lib/cantango/roles_ext/permit/role.rb +35 -0
- data/lib/cantango/roles_ext/permit/role_group.rb +47 -0
- data/lib/generators/cantango/base.rb +71 -0
- data/lib/generators/cantango/basic.rb +41 -0
- data/lib/generators/cantango/license_base.rb +15 -0
- data/lib/generators/cantango/permit_generator.rb +58 -0
- data/lib/generators/cantango/role_permit/role_permit_generator.rb +39 -0
- data/lib/generators/cantango/role_permit/templates/account_permit.erb +4 -0
- data/lib/generators/cantango/role_permit/templates/role_group_permit.erb +24 -0
- data/lib/generators/cantango/role_permit/templates/role_permit.erb +23 -0
- data/lib/generators/cantango/role_permits/role_permits_generator.rb +45 -0
- data/spec/cantango/ability/helper/role_group_spec.rb +33 -0
- data/spec/cantango/ability/helper/role_spec.rb +33 -0
- data/spec/cantango/ability/helper/shared/role_ex.rb +0 -0
- data/spec/cantango/ability/helper/shared/role_group_ex.rb +0 -0
- data/spec/cantango/builder/role_group_spec.rb +5 -0
- data/spec/cantango/builder/role_spec.rb +5 -0
- data/spec/cantango/configuration/role_groups_spec.rb +13 -0
- data/spec/cantango/configuration/role_registry_spec.rb +9 -0
- data/spec/cantango/configuration/roles_spec.rb +11 -0
- data/spec/cantango/configuration/shared/registry_ex.rb +40 -0
- data/spec/cantango/configuration/shared/role_registry_ex.rb +15 -0
- data/spec/cantango/configuration/shared/system_ex.rb +39 -0
- data/spec/cantango/configuration/system_spec.rb +9 -0
- data/spec/cantango/engine/permits_spec.rb +7 -0
- data/spec/cantango/filter/role_group_spec.rb +96 -0
- data/spec/cantango/filter/role_spec.rb +96 -0
- data/spec/cantango/helpers/role_group_spec.rb +26 -0
- data/spec/cantango/helpers/role_spec.rb +26 -0
- data/spec/fixtures/models.rb +2 -0
- data/spec/fixtures/models/admin.rb +2 -0
- data/spec/fixtures/models/admin_account.rb +22 -0
- data/spec/fixtures/models/items.rb +8 -0
- data/spec/fixtures/models/permission.rb +12 -0
- data/spec/fixtures/models/project.rb +2 -0
- data/spec/fixtures/models/simple_roles.rb +48 -0
- data/spec/fixtures/models/user.rb +52 -0
- data/spec/fixtures/models/user_account.rb +7 -0
- data/spec/helpers/current_user_accounts.rb +20 -0
- data/spec/helpers/current_users.rb +10 -0
- data/spec/spec_helper.rb +2 -0
- metadata +223 -0
@@ -0,0 +1,40 @@
|
|
1
|
+
shared_examples_for 'Registry' do
|
2
|
+
describe 'default settings' do
|
3
|
+
|
4
|
+
#its(:registered) { should be_empty }
|
5
|
+
|
6
|
+
it 'should register groups' do
|
7
|
+
subject.register(:a, :b)
|
8
|
+
subject.registered.should include(:a, :b)
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should set defaults' do
|
12
|
+
subject.default = :a, :b
|
13
|
+
subject.default.should include(:a, :b)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe 'register' do
|
18
|
+
before do
|
19
|
+
subject.register :abc, :def
|
20
|
+
end
|
21
|
+
its(:registered) { should include(:abc, :def) }
|
22
|
+
end
|
23
|
+
|
24
|
+
describe 'append <<' do
|
25
|
+
before do
|
26
|
+
subject.clean!
|
27
|
+
subject.register :abc, :def
|
28
|
+
subject << :xyz
|
29
|
+
end
|
30
|
+
its(:registered) { should include(:abc, :def, :xyz) }
|
31
|
+
end
|
32
|
+
|
33
|
+
describe 'get index []' do
|
34
|
+
before do
|
35
|
+
subject.clean!
|
36
|
+
subject.register :abc, :def
|
37
|
+
end
|
38
|
+
specify {subject[0].should == :abc }
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Fix: from cantango-config
|
2
|
+
require 'cantango/configuration/shared/registry_ex'
|
3
|
+
|
4
|
+
shared_examples_for 'Role Registry' do
|
5
|
+
it_should_behave_like "Registry"
|
6
|
+
|
7
|
+
describe "exclude" do
|
8
|
+
before do
|
9
|
+
subject.exclude :admin
|
10
|
+
end
|
11
|
+
|
12
|
+
its(:excluded) { should include(:admin) }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'cantango/configuration/shared/role_registry_ex'
|
2
|
+
|
3
|
+
shared_examples_for 'System' do
|
4
|
+
it_should_behave_like "Role Registry"
|
5
|
+
|
6
|
+
describe 'default system - simple_roles' do
|
7
|
+
its(:system) { should == :simple_roles }
|
8
|
+
end
|
9
|
+
|
10
|
+
describe 'system=' do
|
11
|
+
before do
|
12
|
+
subject.system = :my_sys
|
13
|
+
end
|
14
|
+
its(:system) { should == :my_sys }
|
15
|
+
end
|
16
|
+
|
17
|
+
describe 'system_apis=' do
|
18
|
+
let(:my_own_sys) do
|
19
|
+
{:my_own_sys => {:list => :listing } }
|
20
|
+
end
|
21
|
+
|
22
|
+
before do
|
23
|
+
subject.system_apis = my_own_sys
|
24
|
+
subject.system = :my_own_sys
|
25
|
+
end
|
26
|
+
|
27
|
+
specify { subject.system_api[:list].should == :listing }
|
28
|
+
specify { subject.system_apis.size.should == 1 }
|
29
|
+
end
|
30
|
+
|
31
|
+
describe 'add_systems' do
|
32
|
+
before do
|
33
|
+
subject.add_system :my_other_sys => {:list => :listing }
|
34
|
+
subject.system = :my_other_sys
|
35
|
+
end
|
36
|
+
specify { subject.system_api[:list].should == :listing }
|
37
|
+
specify { subject.system_apis.size.should > 1 }
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'fixtures/models'
|
3
|
+
|
4
|
+
CanTango.configure do |config|
|
5
|
+
config.permission_engine.set :off
|
6
|
+
config.permit_engine.set :on
|
7
|
+
config.categories.register :blog_items => [Article, Post]
|
8
|
+
end
|
9
|
+
|
10
|
+
class AdminsRoleGroupPermit < CanTango::Permit::RoleGroup
|
11
|
+
def initialize ability
|
12
|
+
super
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
16
|
+
|
17
|
+
def calc_rules
|
18
|
+
can :publish, Post
|
19
|
+
can :write, Article
|
20
|
+
can :write, category(:blog_items)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class EditorsRoleGroupPermit < CanTango::Permit::RoleGroup
|
25
|
+
def initialize ability
|
26
|
+
super
|
27
|
+
end
|
28
|
+
|
29
|
+
protected
|
30
|
+
|
31
|
+
def calc_rules
|
32
|
+
can :publish, category(:blog_items)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
describe CanTango::Filter::RoleGroup do
|
38
|
+
describe 'role groups filter - exclude :admins' do
|
39
|
+
let (:user) do
|
40
|
+
User.new 'stan', 'stan@gmail.com'
|
41
|
+
end
|
42
|
+
|
43
|
+
let (:user_account) do
|
44
|
+
ua = UserAccount.new user, :roles => [:user, :admin], :role_groups => [:admins]
|
45
|
+
user.account = ua
|
46
|
+
end
|
47
|
+
|
48
|
+
before do
|
49
|
+
CanTango.config.role_groups.exclude :admins
|
50
|
+
CanTango.config.categories.register :blog_items => [Article, Post]
|
51
|
+
|
52
|
+
@ability = CanTango::Ability.new user_account
|
53
|
+
end
|
54
|
+
|
55
|
+
after do
|
56
|
+
CanTango.config.clear!
|
57
|
+
end
|
58
|
+
|
59
|
+
subject { @ability }
|
60
|
+
specify { @ability.should be_allowed_to(:read, Post)}
|
61
|
+
|
62
|
+
specify { @ability.should_not be_allowed_to(:read, Comment)}
|
63
|
+
specify { @ability.should_not be_allowed_to(:write, Article)}
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe CanTango::Filter::RoleGroup do
|
68
|
+
describe 'role groups filter- only :admins' do
|
69
|
+
let (:user) do
|
70
|
+
User.new 'stan', 'stan@gmail.com'
|
71
|
+
end
|
72
|
+
|
73
|
+
let (:user_account) do
|
74
|
+
ua = UserAccount.new user, :roles => [:user, :admin], :role_groups => [:admins, :editors]
|
75
|
+
user.account = ua
|
76
|
+
end
|
77
|
+
|
78
|
+
before do
|
79
|
+
CanTango.config.categories.register :blog_items => [Article, Post]
|
80
|
+
CanTango.config.role_groups.only :admins
|
81
|
+
@ability = CanTango::Ability.new user_account
|
82
|
+
end
|
83
|
+
|
84
|
+
after do
|
85
|
+
CanTango.config.clear!
|
86
|
+
end
|
87
|
+
|
88
|
+
subject { @ability }
|
89
|
+
specify { @ability.should be_allowed_to(:read, Comment)}
|
90
|
+
specify { @ability.should be_allowed_to(:write, Article)}
|
91
|
+
|
92
|
+
specify { @ability.should be_allowed_to(:publish, Post)}
|
93
|
+
|
94
|
+
specify { @ability.should_not be_allowed_to(:publish, Article)}
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'fixtures/models'
|
3
|
+
require 'cantango/rspec'
|
4
|
+
|
5
|
+
CanTango.configure do |config|
|
6
|
+
config.permission_engine.set :off
|
7
|
+
config.permit_engine.set :on
|
8
|
+
config.categories.register :blog_items => [Article, Post]
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
class UserRolePermit < CanTango::Permit::Role
|
13
|
+
def initialize ability
|
14
|
+
super
|
15
|
+
end
|
16
|
+
|
17
|
+
protected
|
18
|
+
|
19
|
+
def calculate_rules
|
20
|
+
can :read, Comment
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class AdminRolePermit < CanTango::Permit::Role
|
25
|
+
def initialize ability
|
26
|
+
super
|
27
|
+
end
|
28
|
+
|
29
|
+
protected
|
30
|
+
|
31
|
+
def calculate_rules
|
32
|
+
can :read, Post
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
describe CanTango::Filter::Role do
|
38
|
+
describe 'roles filter - exclude :user' do
|
39
|
+
let (:user) do
|
40
|
+
User.new 'stan', 'stan@gmail.com'
|
41
|
+
end
|
42
|
+
|
43
|
+
let (:user_account) do
|
44
|
+
ua = UserAccount.new user, :roles => [:user, :admin], :role_groups => [:admins]
|
45
|
+
user.account = ua
|
46
|
+
end
|
47
|
+
|
48
|
+
before do
|
49
|
+
CanTango.config.roles.exclude :user
|
50
|
+
CanTango.config.categories.register :blog_items => [Article, Post]
|
51
|
+
|
52
|
+
@ability = CanTango::Ability.new user_account
|
53
|
+
end
|
54
|
+
|
55
|
+
after do
|
56
|
+
CanTango.config.clear!
|
57
|
+
end
|
58
|
+
|
59
|
+
subject { @ability }
|
60
|
+
specify { @ability.should be_allowed_to(:read, Post)}
|
61
|
+
|
62
|
+
specify { @ability.should_not be_allowed_to(:read, Comment)}
|
63
|
+
specify { @ability.should_not be_allowed_to(:write, Article)}
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe CanTango::Filter::Role do
|
68
|
+
describe 'roles filter - only :user' do
|
69
|
+
let (:user) do
|
70
|
+
User.new 'stan', 'stan@gmail.com'
|
71
|
+
end
|
72
|
+
|
73
|
+
let (:user_account) do
|
74
|
+
ua = UserAccount.new user, :roles => [:user, :admin], :role_groups => [:admins, :editors]
|
75
|
+
user.account = ua
|
76
|
+
end
|
77
|
+
|
78
|
+
before do
|
79
|
+
CanTango.config.categories.register :blog_items => [Article, Post]
|
80
|
+
CanTango.config.roles.only :user
|
81
|
+
@ability = CanTango::Ability.new user_account
|
82
|
+
end
|
83
|
+
|
84
|
+
after do
|
85
|
+
CanTango.config.clear!
|
86
|
+
end
|
87
|
+
|
88
|
+
subject { @ability }
|
89
|
+
specify { @ability.should be_allowed_to(:read, Comment)}
|
90
|
+
specify { @ability.should be_allowed_to(:write, Article)}
|
91
|
+
|
92
|
+
specify { @ability.should be_allowed_to(:publish, Post)}
|
93
|
+
|
94
|
+
specify { @ability.should_not be_allowed_to(:publish, Article)}
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'cantango/configuration/role_registry_ex'
|
3
|
+
|
4
|
+
class Subject
|
5
|
+
end
|
6
|
+
|
7
|
+
describe CanTango::Helpers::RoleGroup do
|
8
|
+
before do
|
9
|
+
CanTango.config.roles.system = :troles
|
10
|
+
end
|
11
|
+
|
12
|
+
subject do
|
13
|
+
Subject.new
|
14
|
+
end
|
15
|
+
|
16
|
+
specify do
|
17
|
+
subject.role_method(:has).should == :in_role_group?
|
18
|
+
end
|
19
|
+
|
20
|
+
specify do
|
21
|
+
subject.role_method(:list).should == :role_group_list
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'cantango/configuration/role_registry_ex'
|
3
|
+
|
4
|
+
class Subject
|
5
|
+
end
|
6
|
+
|
7
|
+
describe CanTango::Helpers::Role do
|
8
|
+
before do
|
9
|
+
CanTango.config.roles.system = :troles
|
10
|
+
end
|
11
|
+
|
12
|
+
subject do
|
13
|
+
Subject.new
|
14
|
+
end
|
15
|
+
|
16
|
+
specify do
|
17
|
+
subject.role_method(:has).should == :has_role?
|
18
|
+
end
|
19
|
+
|
20
|
+
specify do
|
21
|
+
subject.role_method(:list).should == :role_list
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class AdminAccount
|
2
|
+
attr_accessor :user, :roles, :role_groups
|
3
|
+
|
4
|
+
def initialize user, options = {}
|
5
|
+
@user = user
|
6
|
+
@roles = options[:roles]
|
7
|
+
@role_groups = options[:role_groups]
|
8
|
+
end
|
9
|
+
|
10
|
+
def has_role? name
|
11
|
+
true
|
12
|
+
end
|
13
|
+
|
14
|
+
def roles_list
|
15
|
+
roles
|
16
|
+
end
|
17
|
+
|
18
|
+
def role_groups_list
|
19
|
+
role_groups
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module SimpleRoles
|
2
|
+
def self.included(base)
|
3
|
+
base.send :include, InstanceMethods
|
4
|
+
base.extend ClassMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
def is_role_in_group?(role, group)
|
9
|
+
raise "No group #{group} defined in User model" if !role_groups.has_key?(group)
|
10
|
+
role_groups[group].include?(role)
|
11
|
+
end
|
12
|
+
|
13
|
+
def role_groups
|
14
|
+
{:bloggers => [:editor]}
|
15
|
+
end
|
16
|
+
|
17
|
+
def roles
|
18
|
+
[:guest, :user, :admin, :editor]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
module InstanceMethods
|
23
|
+
attr_accessor :role_groups_list
|
24
|
+
|
25
|
+
def has_role? role
|
26
|
+
roles_list.include? role
|
27
|
+
end
|
28
|
+
|
29
|
+
def has_any_role? roles
|
30
|
+
roles.include?(role.to_sym)
|
31
|
+
end
|
32
|
+
|
33
|
+
def roles_list
|
34
|
+
roles.map{|r| r.to_sym}
|
35
|
+
end
|
36
|
+
|
37
|
+
def is_in_group? group
|
38
|
+
role_groups_list.include? group
|
39
|
+
end
|
40
|
+
alias_method :in_role_group?, :is_in_group?
|
41
|
+
|
42
|
+
def role_groups_list
|
43
|
+
return role_groups.map(&:to_sym) if respond_to?(:role_groups) && !role_groups.nil?
|
44
|
+
@role_groups_list || [] #[:bloggers]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|