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,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
@@ -1,4 +0,0 @@ @@ -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,6 +3,10 @@ require File.join(File.dirname(__FILE__), &#39;test_helper&#39;)
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 &lt; Test::Unit::TestCase @@ -16,6 +20,12 @@ class RoleTest &lt; 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 &lt; Test::Unit::TestCase @@ -25,4 +35,37 @@ class RoleTest &lt; 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 =&gt; 0) do @@ -5,6 +5,8 @@ ActiveRecord::Schema.define(:version =&gt; 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|