Commit cce24f73b25561990f79dea98d08fb03e21ac7c9
1 parent
6e1e807d
Exists in
master
and in
29 other branches
ActionItem41: adjusting access_control plugin so I can have a application-specif…
…ic standard set of roles git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1321 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
5 changed files
with
58 additions
and
4 deletions
Show diff stats
vendor/plugins/access_control/generators/access_control_migration/templates/migration.rb
... | ... | @@ -3,6 +3,8 @@ class AccessControlMigration < ActiveRecord::Migration |
3 | 3 | create_table :roles do |t| |
4 | 4 | t.column :name, :string |
5 | 5 | t.column :permissions, :string |
6 | + t.column :key, :string | |
7 | + t.column :system, :boolean, :default => false | |
6 | 8 | end |
7 | 9 | |
8 | 10 | create_table :role_assignments do |t| | ... | ... |
vendor/plugins/access_control/lib/role.rb
... | ... | @@ -4,6 +4,7 @@ class Role < ActiveRecord::Base |
4 | 4 | serialize :permissions, Array |
5 | 5 | validates_presence_of :name |
6 | 6 | validates_uniqueness_of :name |
7 | + validates_uniqueness_of :key, :if => lambda { |role| !role.key.blank? } | |
7 | 8 | |
8 | 9 | def initialize(*args) |
9 | 10 | super(*args) |
... | ... | @@ -22,6 +23,16 @@ class Role < ActiveRecord::Base |
22 | 23 | perms.keys.detect{|k| perms[k].keys.include?(permissions[0]) } |
23 | 24 | end |
24 | 25 | |
26 | + def name | |
27 | + text = self[:name] | |
28 | + self.class.included_modules.map {|item| item.to_s}.include?('GetText') ? gettext(text) : text | |
29 | + end | |
30 | + | |
31 | + before_destroy :check_for_system_defined_role | |
32 | + def check_for_system_defined_role | |
33 | + ! system | |
34 | + end | |
35 | + | |
25 | 36 | protected |
26 | 37 | def perms |
27 | 38 | ActiveRecord::Base::PERMISSIONS | ... | ... |
vendor/plugins/access_control/test/access_control_test.rb
vendor/plugins/access_control/test/role_test.rb
... | ... | @@ -3,6 +3,10 @@ require File.join(File.dirname(__FILE__), 'test_helper') |
3 | 3 | |
4 | 4 | class RoleTest < Test::Unit::TestCase |
5 | 5 | |
6 | + def setup | |
7 | + Role.delete_all | |
8 | + end | |
9 | + | |
6 | 10 | def test_role_creation |
7 | 11 | count = Role.count |
8 | 12 | role = Role.new(:name => 'any_role') |
... | ... | @@ -16,6 +20,12 @@ class RoleTest < Test::Unit::TestCase |
16 | 20 | assert ! role.save |
17 | 21 | end |
18 | 22 | |
23 | + def test_uniqueness_of_key | |
24 | + Role.create!(:name => 'unique key', :key => 'my_key') | |
25 | + role = Role.new(:key => 'my_key'); role.valid? | |
26 | + assert role.errors.invalid?(:key) | |
27 | + end | |
28 | + | |
19 | 29 | def test_permission_setting |
20 | 30 | role = Role.new(:name => 'permissive_role', :permissions => ['edit_profile']) |
21 | 31 | assert role.save |
... | ... | @@ -25,4 +35,37 @@ class RoleTest < Test::Unit::TestCase |
25 | 35 | assert role.has_permission?('post_content') |
26 | 36 | assert role.has_permission?('edit_profile') |
27 | 37 | end |
38 | + | |
39 | + def test_should_translate_name_if_gettext_is_being_used | |
40 | + role = Role.new(:name => 'my name') | |
41 | + Role.expects(:included_modules).returns(['GetText']) | |
42 | + role.expects(:gettext).with('my name').returns('meu nome') | |
43 | + | |
44 | + assert_equal 'meu nome', role.name | |
45 | + end | |
46 | + | |
47 | + def test_should_not_try_gettext_if_not_being_used | |
48 | + Role.expects(:included_modules).returns([]) | |
49 | + role = Role.new(:name => 'my name') | |
50 | + role.expects(:gettext).never | |
51 | + assert_equal 'my name', role.name | |
52 | + end | |
53 | + | |
54 | + def test_should_remove_non_system_defined_roles_normally | |
55 | + role = Role.create!(:name => 'to be removed', :permissions => [], :system => false) | |
56 | + count = Role.count | |
57 | + role.destroy | |
58 | + assert_equal count - 1, Role.count | |
59 | + end | |
60 | + | |
61 | + def test_should_not_allow_to_remove_system_defined_roles | |
62 | + | |
63 | + role = Role.create!(:name => 'not to be removed', :permissions => [], :system => true) | |
64 | + | |
65 | + count = Role.count | |
66 | + role.destroy | |
67 | + assert_equal count, Role.count | |
68 | + | |
69 | + end | |
70 | + | |
28 | 71 | end | ... | ... |
vendor/plugins/access_control/test/schema.rb
... | ... | @@ -5,6 +5,8 @@ ActiveRecord::Schema.define(:version => 0) do |
5 | 5 | create_table :access_control_test_roles, :force => true do |t| |
6 | 6 | t.column :name, :string |
7 | 7 | t.column :permissions, :string |
8 | + t.column :key, :string | |
9 | + t.column :system, :boolean, :default => false | |
8 | 10 | end |
9 | 11 | |
10 | 12 | create_table :access_control_test_role_assignments, :force => true do |t| | ... | ... |