Commit cce24f73b25561990f79dea98d08fb03e21ac7c9

Authored by AntonioTerceiro
1 parent 6e1e807d

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
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
... ... @@ -1,4 +0,0 @@
1   -require 'test/unit'
2   -
3   -class AccessControlTest < Test::Unit::TestCase
4   -end
vendor/plugins/access_control/test/role_test.rb
... ... @@ -3,6 +3,10 @@ require File.join(File.dirname(__FILE__), &#39;test_helper&#39;)
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 &lt; 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 &lt; 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 =&gt; 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|
... ...