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,6 +3,8 @@ class AccessControlMigration < ActiveRecord::Migration | ||
| 3 | create_table :roles do |t| | 3 | create_table :roles do |t| |
| 4 | t.column :name, :string | 4 | t.column :name, :string |
| 5 | t.column :permissions, :string | 5 | t.column :permissions, :string |
| 6 | + t.column :key, :string | ||
| 7 | + t.column :system, :boolean, :default => false | ||
| 6 | end | 8 | end |
| 7 | 9 | ||
| 8 | create_table :role_assignments do |t| | 10 | create_table :role_assignments do |t| |
vendor/plugins/access_control/lib/role.rb
| @@ -4,6 +4,7 @@ class Role < ActiveRecord::Base | @@ -4,6 +4,7 @@ class Role < ActiveRecord::Base | ||
| 4 | serialize :permissions, Array | 4 | serialize :permissions, Array |
| 5 | validates_presence_of :name | 5 | validates_presence_of :name |
| 6 | validates_uniqueness_of :name | 6 | validates_uniqueness_of :name |
| 7 | + validates_uniqueness_of :key, :if => lambda { |role| !role.key.blank? } | ||
| 7 | 8 | ||
| 8 | def initialize(*args) | 9 | def initialize(*args) |
| 9 | super(*args) | 10 | super(*args) |
| @@ -22,6 +23,16 @@ class Role < ActiveRecord::Base | @@ -22,6 +23,16 @@ class Role < ActiveRecord::Base | ||
| 22 | perms.keys.detect{|k| perms[k].keys.include?(permissions[0]) } | 23 | perms.keys.detect{|k| perms[k].keys.include?(permissions[0]) } |
| 23 | end | 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 | protected | 36 | protected |
| 26 | def perms | 37 | def perms |
| 27 | ActiveRecord::Base::PERMISSIONS | 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,6 +3,10 @@ require File.join(File.dirname(__FILE__), 'test_helper') | ||
| 3 | 3 | ||
| 4 | class RoleTest < Test::Unit::TestCase | 4 | class RoleTest < Test::Unit::TestCase |
| 5 | 5 | ||
| 6 | + def setup | ||
| 7 | + Role.delete_all | ||
| 8 | + end | ||
| 9 | + | ||
| 6 | def test_role_creation | 10 | def test_role_creation |
| 7 | count = Role.count | 11 | count = Role.count |
| 8 | role = Role.new(:name => 'any_role') | 12 | role = Role.new(:name => 'any_role') |
| @@ -16,6 +20,12 @@ class RoleTest < Test::Unit::TestCase | @@ -16,6 +20,12 @@ class RoleTest < Test::Unit::TestCase | ||
| 16 | assert ! role.save | 20 | assert ! role.save |
| 17 | end | 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 | def test_permission_setting | 29 | def test_permission_setting |
| 20 | role = Role.new(:name => 'permissive_role', :permissions => ['edit_profile']) | 30 | role = Role.new(:name => 'permissive_role', :permissions => ['edit_profile']) |
| 21 | assert role.save | 31 | assert role.save |
| @@ -25,4 +35,37 @@ class RoleTest < Test::Unit::TestCase | @@ -25,4 +35,37 @@ class RoleTest < Test::Unit::TestCase | ||
| 25 | assert role.has_permission?('post_content') | 35 | assert role.has_permission?('post_content') |
| 26 | assert role.has_permission?('edit_profile') | 36 | assert role.has_permission?('edit_profile') |
| 27 | end | 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 | end | 71 | end |
vendor/plugins/access_control/test/schema.rb
| @@ -5,6 +5,8 @@ ActiveRecord::Schema.define(:version => 0) do | @@ -5,6 +5,8 @@ ActiveRecord::Schema.define(:version => 0) do | ||
| 5 | create_table :access_control_test_roles, :force => true do |t| | 5 | create_table :access_control_test_roles, :force => true do |t| |
| 6 | t.column :name, :string | 6 | t.column :name, :string |
| 7 | t.column :permissions, :string | 7 | t.column :permissions, :string |
| 8 | + t.column :key, :string | ||
| 9 | + t.column :system, :boolean, :default => false | ||
| 8 | end | 10 | end |
| 9 | 11 | ||
| 10 | create_table :access_control_test_role_assignments, :force => true do |t| | 12 | create_table :access_control_test_role_assignments, :force => true do |t| |