can-has-permission 0.1.0 → 0.2.1

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.
@@ -4,14 +4,14 @@ class CanHasPermissionGenerator < Rails::Generator::Base
4
4
  record do |m|
5
5
  m.migration_template "can_has_permission_create_anonymous.rb", "db/migrate",
6
6
  { :migration_file_name => "can_has_permission_create_anonymous" }
7
- m.migration_template "can_has_permission_create_permissions.rb", "db/migrate",
8
- { :migration_file_name => "can_has_permission_create_permissions" }
9
- m.migration_template "can_has_permission_create_role_types.rb", "db/migrate",
10
- { :migration_file_name => "can_has_permission_create_role_types" }
11
- m.migration_template "can_has_permission_create_permission_types.rb", "db/migrate",
12
- { :migration_file_name => "can_has_permission_create_permission_types" }
7
+ m.migration_template "can_has_permission_create_permission_maps.rb", "db/migrate",
8
+ { :migration_file_name => "can_has_permission_create_permission_maps" }
13
9
  m.migration_template "can_has_permission_create_roles.rb", "db/migrate",
14
10
  { :migration_file_name => "can_has_permission_create_roles" }
11
+ m.migration_template "can_has_permission_create_permissions.rb", "db/migrate",
12
+ { :migration_file_name => "can_has_permission_create_permissions" }
13
+ m.migration_template "can_has_permission_create_role_maps.rb", "db/migrate",
14
+ { :migration_file_name => "can_has_permission_create_role_maps" }
15
15
  end
16
16
  end
17
17
  end
@@ -0,0 +1,18 @@
1
+ class CanHasPermissionCreatePermissionMaps < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :permission_maps do |t|
4
+ t.string :permissible_type, :null => false
5
+ t.integer :permissible_id, :null => false
6
+ t.integer :permission_id, :null => false
7
+ t.timestamps
8
+ end
9
+ add_index :permission_maps, :permission_id
10
+ add_index :permission_maps, [:permissible_id, :permissible_type]
11
+ end
12
+
13
+ def self.down
14
+ remove_index :permission_maps, :permission_id
15
+ remove_index :permission_maps, [:permissible_id, :permissible_type]
16
+ drop_table :permission_maps
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ class CanHasPermissionCreateRoleMaps < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :role_maps do |t|
4
+ t.string :permissible_type, :null => false
5
+ t.integer :permissible_id, :null => false
6
+ t.integer :role_id, :null => false
7
+ t.timestamps
8
+ end
9
+ add_index :role_maps, :role_id
10
+ add_index :role_maps, [:permissible_id, :permissible_type]
11
+ end
12
+
13
+ def self.down
14
+ remove_index :role_maps, :role_id
15
+ remove_index :role_maps, [:permissible_id, :permissible_type]
16
+ drop_table :role_maps
17
+ end
18
+ end
@@ -0,0 +1,14 @@
1
+ module ActionController
2
+ module Filters
3
+ module ClassMethods
4
+ def requires_permission(permission)
5
+ before_filter lambda { |instance|
6
+ unless instance.send(:current_user).can?(permission)
7
+ instance.send(:permission_denied, permission)
8
+ return false
9
+ end
10
+ }
11
+ end
12
+ end
13
+ end
14
+ end
@@ -2,17 +2,19 @@ module CanHasPermission
2
2
 
3
3
  def self.included(base)
4
4
  base.class_eval do
5
- has_many :roles, :as => 'permissible', :class_name => 'CanHasPermission::Role'
6
- has_many :permissions, :as => 'permissible', :class_name => 'CanHasPermission::Permission'
7
- accepts_nested_attributes_for :permissions
8
- accepts_nested_attributes_for :roles
5
+ has_many :role_maps, :as => 'permissible', :class_name => 'CanHasPermission::RoleMap'
6
+ has_many :permission_maps, :as => 'permissible', :class_name => 'CanHasPermission::PermissionMap'
7
+ has_many :permissions, :through => :permission_maps
8
+ has_many :roles, :through => :role_maps
9
+ accepts_nested_attributes_for :role_maps
10
+ accepts_nested_attributes_for :permission_maps
9
11
  end
10
12
  end
11
13
 
12
14
  def can?(permission)
13
15
  return true if (!self.permissions.select{|p| p.name == permission.to_s}.empty?)
14
16
  self.roles.each do |role|
15
- return true if role.role_type.can?(permission)
17
+ return true if role.can?(permission)
16
18
  end
17
19
  false
18
20
  end
@@ -22,8 +24,9 @@ module CanHasPermission
22
24
  end
23
25
  end
24
26
 
27
+ require File.join(File.dirname(__FILE__), 'can-has-permission', 'permission_map')
25
28
  require File.join(File.dirname(__FILE__), 'can-has-permission', 'permission')
26
- require File.join(File.dirname(__FILE__), 'can-has-permission', 'permission_type')
29
+ require File.join(File.dirname(__FILE__), 'can-has-permission', 'role_map')
27
30
  require File.join(File.dirname(__FILE__), 'can-has-permission', 'role')
28
- require File.join(File.dirname(__FILE__), 'can-has-permission', 'role_type')
29
- require File.join(File.dirname(__FILE__), 'can-has-permission', 'anonymous')
31
+ require File.join(File.dirname(__FILE__), 'can-has-permission', 'anonymous')
32
+ require File.join(File.dirname(__FILE__), 'action_controller')
@@ -1,27 +1,7 @@
1
1
  module CanHasPermission
2
2
  class Permission < ActiveRecord::Base
3
- validates_presence_of :permission_type_id, :if => lambda{|instance| instance.name.blank?}
4
- validates_presence_of :permissible_id
5
- validates_presence_of :permissible_type
6
- validates_uniqueness_of :permissible_type, :permissible_id, :scope => :permissible_id
7
- before_save :create_permission, :unless => lambda{|instance| instance.name.blank?}
8
-
9
- belongs_to :permissible, :polymorphic => true
10
- belongs_to :permission_type, :class_name => 'CanHasPermission::PermissionType'
11
-
12
- def name=(permission)
13
- @permission = permission.to_s
14
- end
15
-
16
- #test this
17
- def name
18
- @permission || permission_type.try(:name)
19
- end
20
-
21
- protected
22
-
23
- def create_permission
24
- self.permission_type_id = CanHasPermission::PermissionType.find_or_create_by_name(:name => self.name).id
25
- end
3
+ validates_presence_of :name
4
+ validates_uniqueness_of :name
5
+ has_many :permission_maps, :class_name => 'CanHasPermission::PermissionMap'
26
6
  end
27
7
  end
@@ -0,0 +1,11 @@
1
+ module CanHasPermission
2
+ class PermissionMap < ActiveRecord::Base
3
+ validates_presence_of :permission_id
4
+ #validates_presence_of :permissible_id
5
+ #validates_presence_of :permissible_type
6
+ validates_uniqueness_of :permissible_type, :permissible_id, :scope => :permissible_id
7
+
8
+ belongs_to :permissible, :polymorphic => true
9
+ belongs_to :permission, :class_name => 'CanHasPermission::Permission'
10
+ end
11
+ end
@@ -1,25 +1,14 @@
1
1
  module CanHasPermission
2
2
  class Role < ActiveRecord::Base
3
- validates_presence_of :role_type_id, :if => lambda{|instance| instance.name.blank?}
4
- validates_presence_of :permissible_id
5
- validates_presence_of :permissible_type
6
- validates_uniqueness_of :permissible_type, :permissible_id, :scope => :permissible_id
7
- before_save :create_role, :unless => lambda{|instance| instance.name.blank?}
8
-
9
- belongs_to :permissible, :polymorphic => true
10
- belongs_to :role_type, :class_name => 'CanHasPermission::RoleType'
11
-
12
- def name=(role)
13
- @role = role.to_s
14
- end
15
-
16
- def name
17
- @role || role_type.try(:name)
18
- end
19
-
20
- protected
21
- def create_role
22
- self.role_type_id = CanHasPermission::RoleType.find_or_create_by_name(:name => self.name).id
3
+ validates_presence_of :name
4
+ validates_uniqueness_of :name
5
+ has_many :role_maps, :class_name => 'CanHasPermission::RoleMap'
6
+ has_many :permission_maps, :as => 'permissible', :class_name => 'CanHasPermission::PermissionMap'
7
+ has_many :permissions, :through => :permission_maps
8
+
9
+ def can?(permission)
10
+ return true if (!self.permissions.select{|p| p.name == permission.to_s}.empty?)
11
+ false
23
12
  end
24
13
  end
25
14
  end
@@ -0,0 +1,11 @@
1
+ module CanHasPermission
2
+ class RoleMap < ActiveRecord::Base
3
+ validates_presence_of :role_id
4
+ #validates_presence_of :permissible_id
5
+ #validates_presence_of :permissible_type
6
+ validates_uniqueness_of :permissible_type, :permissible_id, :scope => :permissible_id
7
+
8
+ belongs_to :permissible, :polymorphic => true
9
+ belongs_to :role, :class_name => 'CanHasPermission::Role'
10
+ end
11
+ end
data/spec/spec_helper.rb CHANGED
@@ -7,7 +7,7 @@ require 'ruby-debug'
7
7
  def reset_database
8
8
  ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
9
9
  ActiveRecord::Schema.define(:version => 1) do
10
- create_table :role_types do |t|
10
+ create_table :roles do |t|
11
11
  t.string :name, :null => false
12
12
  t.timestamps
13
13
  end
@@ -17,22 +17,22 @@ def reset_database
17
17
  t.timestamps
18
18
  end
19
19
 
20
- create_table :permission_types do |t|
20
+ create_table :permissions do |t|
21
21
  t.string :name, :null => false
22
22
  t.timestamps
23
23
  end
24
24
 
25
- create_table :roles do |t|
25
+ create_table :role_maps do |t|
26
26
  t.string :permissible_type, :null => false
27
27
  t.integer :permissible_id, :null => false
28
- t.integer :role_type_id, :null => false
28
+ t.integer :role_id, :null => false
29
29
  t.timestamps
30
30
  end
31
31
 
32
- create_table :permissions do |t|
32
+ create_table :permission_maps do |t|
33
33
  t.string :permissible_type, :null => false
34
34
  t.integer :permissible_id, :null => false
35
- t.integer :permission_type_id, :null => false
35
+ t.integer :permission_id, :null => false
36
36
  t.timestamps
37
37
  end
38
38
  end
@@ -51,17 +51,18 @@ describe CanHasPermission::Anonymous do
51
51
  end
52
52
  end
53
53
  end
54
+
54
55
  describe "creating a role_type with permissions" do
55
56
  before(:each) do
56
57
  @role_type_name = 'type'
57
- @role_type = CanHasPermission::RoleType.create!(:name => @role_type_name)
58
+ @role_type = CanHasPermission::Role.create!(:name => @role_type_name)
58
59
  @role_type.permissions.create!(:name => 'perm')
59
60
  @role_type.reload
60
61
  end
61
62
  describe "and adding the role to anon" do
62
63
  before(:each) do
63
64
  @role = CanHasPermission::Anonymous.create!(:name => 'user')
64
- @role.roles.create!(:name => @role_type_name)
65
+ @role.role_maps.create!(:role => @role_type)
65
66
  end
66
67
  describe "#can?" do
67
68
  it "should return true when given the permission" do
@@ -73,4 +74,21 @@ describe CanHasPermission::Anonymous do
73
74
  end
74
75
  end
75
76
  end
77
+
78
+ it "using nested attributes should save" do
79
+ role =CanHasPermission::Role.create!(:name => 'role')
80
+ anon = CanHasPermission::Anonymous.create(:name => 'user', :role_maps_attributes => [{:role => role}])
81
+ anon.reload
82
+ anon.role_maps.should_not be_empty
83
+ anon.roles.should_not be_empty
84
+ anon.role_maps.first.permissible_id.should_not be_nil
85
+ end
86
+ it "using nested attributes should save" do
87
+ role =CanHasPermission::Permission.create!(:name => 'role')
88
+ anon = CanHasPermission::Anonymous.create(:name => 'user', :permission_maps_attributes => [{:permission => role}])
89
+ anon.reload
90
+ anon.permission_maps.should_not be_empty
91
+ anon.permissions.should_not be_empty
92
+ anon.permission_maps.first.permissible_id.should_not be_nil
93
+ end
76
94
  end
@@ -0,0 +1,37 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'spec_helper')
2
+
3
+ describe CanHasPermission::PermissionMap do
4
+ it "created with all attributes should be valid" do
5
+ role = CanHasPermission::PermissionMap.new(:permissible_id => 1, :permissible_type => 'Object', :permission_id => 1)
6
+ role.should be_valid
7
+ end
8
+ it "should be invalid without an id" do
9
+ role = CanHasPermission::PermissionMap.new(:permissible_id => 1, :permissible_type => 'Object')
10
+ role.should be_invalid
11
+ end
12
+ it "two permissions with the same object should not be valid" do
13
+ role1 = CanHasPermission::PermissionMap.create!(:permissible_id => 1, :permissible_type => 'Object', :permission_id => 1)
14
+ role2 = CanHasPermission::PermissionMap.new(:permissible_id => 1, :permissible_type => 'Object', :permission_id => 1)
15
+ role2.should_not be_valid
16
+ end
17
+ it "two permissions with different object ids should be valid" do
18
+ role1 = CanHasPermission::PermissionMap.create!(:permissible_id => 1, :permissible_type => 'Object', :permission_id => 1)
19
+ role2 = CanHasPermission::PermissionMap.new(:permissible_id => 2, :permissible_type => 'Object', :permission_id => 1)
20
+ role2.should be_valid
21
+ end
22
+ it "two permissions with the same object but different roles should be valid" do
23
+ role1 = CanHasPermission::PermissionMap.create!(:permissible_id => 1, :permissible_type => 'Object', :permission_id => 1)
24
+ role2 = CanHasPermission::PermissionMap.new(:permissible_id => 2, :permissible_type => 'Object', :permission_id => 2)
25
+ role2.should be_valid
26
+ end
27
+ describe "with a permission" do
28
+ before(:each) do
29
+ @role_type = CanHasPermission::Permission.create!(:name => 'role')
30
+ end
31
+ it "should be valid without a name" do
32
+ role = CanHasPermission::PermissionMap.new(:permissible_id => 1, :permissible_type => 'Object', :permission => @role_type)
33
+ role.should be_valid
34
+ end
35
+ end
36
+
37
+ end
@@ -1,59 +1,20 @@
1
1
  require File.join(File.dirname(__FILE__), '..', 'spec_helper')
2
2
 
3
3
  describe CanHasPermission::Permission do
4
- it "created with all attributes should be valid" do
5
- role = CanHasPermission::Permission.new(:permissible_id => 1, :permissible_type => 'Object', :name => 'role')
4
+ it "should be valid with a name" do
5
+ role = CanHasPermission::Permission.new(:name => 'Bingo')
6
6
  role.should be_valid
7
7
  end
8
- it "should be invalid without a name" do
9
- role = CanHasPermission::Permission.new(:permissible_id => 1, :permissible_type => 'Object')
10
- role.should be_invalid
8
+ it "should not be valid without a name" do
9
+ role = CanHasPermission::Permission.new()
10
+ role.should_not be_valid
11
11
  end
12
- it "two permissions with the same object should not be valid" do
13
- role1 = CanHasPermission::Permission.create!(:permissible_id => 1, :permissible_type => 'Object', :name => 'role')
14
- role2 = CanHasPermission::Permission.new(:permissible_id => 1, :permissible_type => 'Object', :name => 'role')
12
+ it "should not be valid when it has a name that already exists" do
13
+ name = 'the same'
14
+ role1 = CanHasPermission::Permission.create!(:name => 'the same')
15
+ role2 = CanHasPermission::Permission.new(:name => 'the same')
16
+ role1.should be_valid
17
+ role1.id.should_not be_nil
15
18
  role2.should_not be_valid
16
19
  end
17
- it "two permissions with different object ids should be valid" do
18
- role1 = CanHasPermission::Permission.create!(:permissible_id => 1, :permissible_type => 'Object', :name => 'role')
19
- role2 = CanHasPermission::Permission.new(:permissible_id => 2, :permissible_type => 'Object', :name => 'role')
20
- role2.should be_valid
21
- end
22
- describe "with a role type" do
23
- before(:each) do
24
- @role_type = CanHasPermission::PermissionType.create!(:name => 'role')
25
- end
26
- it "should be valid without a name" do
27
- role = CanHasPermission::Permission.new(:permissible_id => 1, :permissible_type => 'Object', :name => @role_type)
28
- role.should be_valid
29
- end
30
- end
31
- it "should be invalid without a permissible_id" do
32
- role = CanHasPermission::Permission.new(:permissible_type => 'Object', :name => 'role')
33
- role.should be_invalid
34
- end
35
- it "should be invalid without a permissible_type" do
36
- role = CanHasPermission::Permission.new(:permissible_id => 1, :name => 'role', :name => 'role')
37
- role.should be_invalid
38
- end
39
- describe "created with a name and not a permission" do
40
- before(:each) do
41
- @role_name = 'role'
42
- @role = CanHasPermission::Permission.create!(:permissible_id => 1, :permissible_type => 'Object', :name => @role_name)
43
- end
44
- it "should create a permission_type" do
45
- CanHasPermission::PermissionType.count(:conditions => {:name => @role_name}).should == 1
46
- end
47
- describe "and another role of the same permission is created" do
48
- before(:each) do
49
- @role2 = CanHasPermission::Permission.create!(:permissible_id => 2, :permissible_type => 'Object', :name => @role_name)
50
- end
51
- it "should not create a second permission_type" do
52
- CanHasPermission::PermissionType.count(:conditions => {:name => @role_name}).should == 1
53
- end
54
- it "both should have the same permission_type instance" do
55
- @role2.permission_type_id.should == @role.permission_type_id
56
- end
57
- end
58
- end
59
20
  end
@@ -0,0 +1,37 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'spec_helper')
2
+
3
+ describe CanHasPermission::RoleMap do
4
+ it "created with all attributes should be valid" do
5
+ role = CanHasPermission::RoleMap.new(:permissible_id => 1, :permissible_type => 'Object', :role_id => 1)
6
+ role.should be_valid
7
+ end
8
+ it "should be invalid without an id" do
9
+ role = CanHasPermission::RoleMap.new(:permissible_id => 1, :permissible_type => 'Object')
10
+ role.should be_invalid
11
+ end
12
+ it "two permissions with the same object should not be valid" do
13
+ role1 = CanHasPermission::RoleMap.create!(:permissible_id => 1, :permissible_type => 'Object', :role_id => 1)
14
+ role2 = CanHasPermission::RoleMap.new(:permissible_id => 1, :permissible_type => 'Object', :role_id => 1)
15
+ role2.should_not be_valid
16
+ end
17
+ it "two permissions with different object ids should be valid" do
18
+ role1 = CanHasPermission::RoleMap.create!(:permissible_id => 1, :permissible_type => 'Object', :role_id => 1)
19
+ role2 = CanHasPermission::RoleMap.new(:permissible_id => 2, :permissible_type => 'Object', :role_id => 1)
20
+ role2.should be_valid
21
+ end
22
+ it "two permissions with the same object but different roles should be valid" do
23
+ role1 = CanHasPermission::RoleMap.create!(:permissible_id => 1, :permissible_type => 'Object', :role_id => 1)
24
+ role2 = CanHasPermission::RoleMap.new(:permissible_id => 2, :permissible_type => 'Object', :role_id => 2)
25
+ role2.should be_valid
26
+ end
27
+ describe "with a permission" do
28
+ before(:each) do
29
+ @role_type = CanHasPermission::Role.create!(:name => 'role')
30
+ end
31
+ it "should be valid without a name" do
32
+ role = CanHasPermission::RoleMap.new(:permissible_id => 1, :permissible_type => 'Object', :role => @role_type)
33
+ role.should be_valid
34
+ end
35
+ end
36
+
37
+ end
@@ -1,58 +1,37 @@
1
1
  require File.join(File.dirname(__FILE__), '..', 'spec_helper')
2
2
 
3
3
  describe CanHasPermission::Role do
4
- it "created with all attributes should be valid" do
5
- role = CanHasPermission::Role.new(:permissible_id => 1, :permissible_type => 'Object', :name => 'role')
4
+ it "should be valid with a name" do
5
+ role = CanHasPermission::Role.new(:name => 'Bingo')
6
6
  role.should be_valid
7
7
  end
8
- it "should be invalid without a name" do
9
- role = CanHasPermission::Role.new(:permissible_id => 1, :permissible_type => 'Object')
10
- role.should be_invalid
8
+ it "should not be valid without a name" do
9
+ role = CanHasPermission::Role.new()
10
+ role.should_not be_valid
11
11
  end
12
- it "two roles with the same object and role should not be valid" do
13
- role1 = CanHasPermission::Role.create!(:permissible_id => 1, :permissible_type => 'Object', :name => 'role')
14
- role2 = CanHasPermission::Role.new(:permissible_id => 1, :permissible_type => 'Object', :name => 'role')
12
+ it "should not be valid when it has a name that already exists" do
13
+ name = 'the same'
14
+ role1 = CanHasPermission::Role.create!(:name => 'the same')
15
+ role2 = CanHasPermission::Role.new(:name => 'the same')
16
+ role1.should be_valid
17
+ role1.id.should_not be_nil
15
18
  role2.should_not be_valid
16
19
  end
17
- it "two roles with the same object should be valid" do
18
- role1 = CanHasPermission::Role.create!(:permissible_id => 1, :permissible_type => 'Object', :name => 'role')
19
- role2 = CanHasPermission::Role.new(:permissible_id => 2, :permissible_type => 'Object', :name => 'role')
20
- role2.should be_valid
21
- end
22
- describe "with a role type" do
23
- before(:each) do
24
- @role_type = CanHasPermission::RoleType.create!(:name => 'role')
25
- end
26
- it "should be valid without a name" do
27
- role = CanHasPermission::Role.new(:permissible_id => 1, :permissible_type => 'Object', :role_type => @role_type)
28
- role.should be_valid
29
- end
30
- end
31
- it "should be invalid without a permissible_id" do
32
- role = CanHasPermission::Role.new(:permissible_type => 'Object', :name => 'role')
33
- role.should be_invalid
34
- end
35
- it "should be invalid without a permissible_type" do
36
- role = CanHasPermission::Role.new(:permissible_id => 1, :name => 'role', :name => 'role')
37
- role.should be_invalid
38
- end
39
- describe "created with a name and not a type" do
20
+ describe "creating a role_type with permissions" do
40
21
  before(:each) do
41
- @role_name = 'role'
42
- @role = CanHasPermission::Role.create!(:permissible_id => 1, :permissible_type => 'Object', :name => @role_name)
22
+ @role = CanHasPermission::Role.create!(:name => 'joe')
23
+ @role.permissions.create!(:name => 'perm')
24
+ @role.reload
43
25
  end
44
- it "should create a role_type" do
45
- CanHasPermission::RoleType.count(:conditions => {:name => @role_name}).should == 1
26
+ it "should have an attached permission" do
27
+ @role.permissions.should_not be_empty
46
28
  end
47
- describe "and another role of the same type is created" do
48
- before(:each) do
49
- @role2 = CanHasPermission::Role.create!(:permissible_id => 2, :permissible_type => 'Object', :name => @role_name)
50
- end
51
- it "should not create a second role_type" do
52
- CanHasPermission::RoleType.count(:conditions => {:name => @role_name}).should == 1
29
+ describe "#can?" do
30
+ it "should return true when given the permission" do
31
+ @role.can?(:perm).should be_true
53
32
  end
54
- it "both should have the same role_type instance" do
55
- @role2.role_type_id.should == @role.role_type_id
33
+ it "should return false when given a different permission" do
34
+ @role.can?(:perm2).should be_false
56
35
  end
57
36
  end
58
37
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: can-has-permission
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 21
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
+ - 2
8
9
  - 1
9
- - 0
10
- version: 0.1.0
10
+ version: 0.2.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Chris Rode
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-25 00:00:00 +01:00
18
+ date: 2010-08-26 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -30,23 +30,22 @@ extra_rdoc_files:
30
30
  files:
31
31
  - generators/can_has_permission_generator.rb
32
32
  - generators/templates/can_has_permission_create_anonymous.rb
33
- - generators/templates/can_has_permission_create_permission_types.rb
34
- - generators/templates/can_has_permission_create_permissions.rb
35
- - generators/templates/can_has_permission_create_role_types.rb
36
- - generators/templates/can_has_permission_create_roles.rb
33
+ - generators/templates/can_has_permission_create_permission_maps.rb
34
+ - generators/templates/can_has_permission_create_role_maps.rb
35
+ - lib/action_controller.rb
37
36
  - lib/can-has-permission.rb
38
37
  - lib/can-has-permission/anonymous.rb
39
38
  - lib/can-has-permission/permission.rb
40
- - lib/can-has-permission/permission_type.rb
39
+ - lib/can-has-permission/permission_map.rb
41
40
  - lib/can-has-permission/role.rb
42
- - lib/can-has-permission/role_type.rb
41
+ - lib/can-has-permission/role_map.rb
43
42
  - README.rdoc
44
43
  - spec/spec_helper.rb
45
44
  - spec/tests/anonymous_spec.rb
45
+ - spec/tests/permission_map_spec.rb
46
46
  - spec/tests/permission_spec.rb
47
- - spec/tests/permission_type_spec.rb
47
+ - spec/tests/role_map_spec.rb
48
48
  - spec/tests/role_spec.rb
49
- - spec/tests/role_type_spec.rb
50
49
  has_rdoc: true
51
50
  homepage: http://github.com/cirode/can-has-permission
52
51
  licenses: []
@@ -84,7 +83,7 @@ summary: simple permissions based authorisation
84
83
  test_files:
85
84
  - spec/spec_helper.rb
86
85
  - spec/tests/anonymous_spec.rb
86
+ - spec/tests/permission_map_spec.rb
87
87
  - spec/tests/permission_spec.rb
88
- - spec/tests/permission_type_spec.rb
88
+ - spec/tests/role_map_spec.rb
89
89
  - spec/tests/role_spec.rb
90
- - spec/tests/role_type_spec.rb
@@ -1,14 +0,0 @@
1
- class CanHasPermissionCreatePermissionTypes < ActiveRecord::Migration
2
- def self.up
3
- create_table :permission_types do |t|
4
- t.string :name, :null => false
5
- t.timestamps
6
- end
7
- add_index :permission_types, :name, :unique => true
8
- end
9
-
10
- def self.down
11
- remove_index :permission_types, :name
12
- drop_table :permission_types
13
- end
14
- end
@@ -1,18 +0,0 @@
1
- class CanHasPermissionCreatePermissions < ActiveRecord::Migration
2
- def self.up
3
- create_table :permissions do |t|
4
- t.string :permissible_type, :null => false
5
- t.integer :permissible_id, :null => false
6
- t.integer :permission_type_id, :null => false
7
- t.timestamps
8
- end
9
- add_index :permissions, :permission_type_id
10
- add_index :permissions, [:permissible_id, :permissible_type]
11
- end
12
-
13
- def self.down
14
- remove_index :permissions, :permission_type_id
15
- remove_index :permissions, [:permissible_id, :permissible_type]
16
- drop_table :permissions
17
- end
18
- end
@@ -1,14 +0,0 @@
1
- class CanHasPermissionCreateRoleTypes < ActiveRecord::Migration
2
- def self.up
3
- create_table :role_types do |t|
4
- t.string :name, :null => false
5
- t.timestamps
6
- end
7
- add_index :role_types, :name, :unique => true
8
- end
9
-
10
- def self.down
11
- remove_index :role_types, :name
12
- drop_table :role_types
13
- end
14
- end
@@ -1,18 +0,0 @@
1
- class CanHasPermissionCreateRoles < ActiveRecord::Migration
2
- def self.up
3
- create_table :roles do |t|
4
- t.string :permissible_type, :null => false
5
- t.integer :permissible_id, :null => false
6
- t.integer :role_type_id, :null => false
7
- t.timestamps
8
- end
9
- add_index :roles, :role_type_id
10
- add_index :roles, [:permissible_id, :permissible_type]
11
- end
12
-
13
- def self.down
14
- remove_index :roles, :role_type_id
15
- remove_index :roles, [:permissible_id, :permissible_type]
16
- drop_table :roles
17
- end
18
- end
@@ -1,7 +0,0 @@
1
- module CanHasPermission
2
- class PermissionType < ActiveRecord::Base
3
- validates_presence_of :name
4
- validates_uniqueness_of :name
5
- has_many :permissions, :class_name => 'CanHasPermission::Permission'
6
- end
7
- end
@@ -1,14 +0,0 @@
1
- module CanHasPermission
2
- class RoleType < ActiveRecord::Base
3
- validates_presence_of :name
4
- validates_uniqueness_of :name
5
- has_many :roles, :class_name => 'CanHasPermission::Role'
6
- has_many :permissions, :as => 'permissible', :class_name => 'CanHasPermission::Permission'
7
- accepts_nested_attributes_for :permissions
8
-
9
- def can?(permission)
10
- return true if (!self.permissions.select{|p| p.name == permission.to_s}.empty?)
11
- false
12
- end
13
- end
14
- end
@@ -1,20 +0,0 @@
1
- require File.join(File.dirname(__FILE__), '..', 'spec_helper')
2
-
3
- describe CanHasPermission::PermissionType do
4
- it "should be valid with a name" do
5
- role = CanHasPermission::PermissionType.new(:name => 'Bingo')
6
- role.should be_valid
7
- end
8
- it "should not be valid without a name" do
9
- role = CanHasPermission::PermissionType.new()
10
- role.should_not be_valid
11
- end
12
- it "should not be valid when it has a name that already exists" do
13
- name = 'the same'
14
- role1 = CanHasPermission::PermissionType.create!(:name => 'the same')
15
- role2 = CanHasPermission::PermissionType.new(:name => 'the same')
16
- role1.should be_valid
17
- role1.id.should_not be_nil
18
- role2.should_not be_valid
19
- end
20
- end
@@ -1,38 +0,0 @@
1
- require File.join(File.dirname(__FILE__), '..', 'spec_helper')
2
-
3
- describe CanHasPermission::RoleType do
4
- it "should be valid with a name" do
5
- role = CanHasPermission::RoleType.new(:name => 'Bingo')
6
- role.should be_valid
7
- end
8
- it "should not be valid without a name" do
9
- role = CanHasPermission::RoleType.new()
10
- role.should_not be_valid
11
- end
12
- it "should not be valid when it has a name that already exists" do
13
- name = 'the same'
14
- role1 = CanHasPermission::RoleType.create!(:name => 'the same')
15
- role2 = CanHasPermission::RoleType.new(:name => 'the same')
16
- role1.should be_valid
17
- role1.id.should_not be_nil
18
- role2.should_not be_valid
19
- end
20
- describe "creating a role_type with permissions" do
21
- before(:each) do
22
- @role = CanHasPermission::RoleType.create!(:name => 'joe')
23
- @role.permissions.create!(:name => 'perm')
24
- @role.reload
25
- end
26
- it "should have an attached permission" do
27
- @role.permissions.should_not be_empty
28
- end
29
- describe "#can?" do
30
- it "should return true when given the permission" do
31
- @role.can?(:perm).should be_true
32
- end
33
- it "should return false when given a different permission" do
34
- @role.can?(:perm2).should be_false
35
- end
36
- end
37
- end
38
- end