From cce24f73b25561990f79dea98d08fb03e21ac7c9 Mon Sep 17 00:00:00 2001 From: AntonioTerceiro Date: Fri, 8 Feb 2008 23:36:54 +0000 Subject: [PATCH] ActionItem41: adjusting access_control plugin so I can have a application-specific standard set of roles --- vendor/plugins/access_control/generators/access_control_migration/templates/migration.rb | 2 ++ vendor/plugins/access_control/lib/role.rb | 11 +++++++++++ vendor/plugins/access_control/test/access_control_test.rb | 4 ---- vendor/plugins/access_control/test/role_test.rb | 43 +++++++++++++++++++++++++++++++++++++++++++ vendor/plugins/access_control/test/schema.rb | 2 ++ 5 files changed, 58 insertions(+), 4 deletions(-) delete mode 100644 vendor/plugins/access_control/test/access_control_test.rb diff --git a/vendor/plugins/access_control/generators/access_control_migration/templates/migration.rb b/vendor/plugins/access_control/generators/access_control_migration/templates/migration.rb index 26058ec..85c87dc 100644 --- a/vendor/plugins/access_control/generators/access_control_migration/templates/migration.rb +++ b/vendor/plugins/access_control/generators/access_control_migration/templates/migration.rb @@ -3,6 +3,8 @@ class AccessControlMigration < ActiveRecord::Migration create_table :roles do |t| t.column :name, :string t.column :permissions, :string + t.column :key, :string + t.column :system, :boolean, :default => false end create_table :role_assignments do |t| diff --git a/vendor/plugins/access_control/lib/role.rb b/vendor/plugins/access_control/lib/role.rb index fb83f99..9d527cf 100644 --- a/vendor/plugins/access_control/lib/role.rb +++ b/vendor/plugins/access_control/lib/role.rb @@ -4,6 +4,7 @@ class Role < ActiveRecord::Base serialize :permissions, Array validates_presence_of :name validates_uniqueness_of :name + validates_uniqueness_of :key, :if => lambda { |role| !role.key.blank? } def initialize(*args) super(*args) @@ -22,6 +23,16 @@ class Role < ActiveRecord::Base perms.keys.detect{|k| perms[k].keys.include?(permissions[0]) } end + def name + text = self[:name] + self.class.included_modules.map {|item| item.to_s}.include?('GetText') ? gettext(text) : text + end + + before_destroy :check_for_system_defined_role + def check_for_system_defined_role + ! system + end + protected def perms ActiveRecord::Base::PERMISSIONS diff --git a/vendor/plugins/access_control/test/access_control_test.rb b/vendor/plugins/access_control/test/access_control_test.rb deleted file mode 100644 index e905578..0000000 --- a/vendor/plugins/access_control/test/access_control_test.rb +++ /dev/null @@ -1,4 +0,0 @@ -require 'test/unit' - -class AccessControlTest < Test::Unit::TestCase -end diff --git a/vendor/plugins/access_control/test/role_test.rb b/vendor/plugins/access_control/test/role_test.rb index 6e4ada3..4e1fb18 100644 --- a/vendor/plugins/access_control/test/role_test.rb +++ b/vendor/plugins/access_control/test/role_test.rb @@ -3,6 +3,10 @@ require File.join(File.dirname(__FILE__), 'test_helper') class RoleTest < Test::Unit::TestCase + def setup + Role.delete_all + end + def test_role_creation count = Role.count role = Role.new(:name => 'any_role') @@ -16,6 +20,12 @@ class RoleTest < Test::Unit::TestCase assert ! role.save end + def test_uniqueness_of_key + Role.create!(:name => 'unique key', :key => 'my_key') + role = Role.new(:key => 'my_key'); role.valid? + assert role.errors.invalid?(:key) + end + def test_permission_setting role = Role.new(:name => 'permissive_role', :permissions => ['edit_profile']) assert role.save @@ -25,4 +35,37 @@ class RoleTest < Test::Unit::TestCase assert role.has_permission?('post_content') assert role.has_permission?('edit_profile') end + + def test_should_translate_name_if_gettext_is_being_used + role = Role.new(:name => 'my name') + Role.expects(:included_modules).returns(['GetText']) + role.expects(:gettext).with('my name').returns('meu nome') + + assert_equal 'meu nome', role.name + end + + def test_should_not_try_gettext_if_not_being_used + Role.expects(:included_modules).returns([]) + role = Role.new(:name => 'my name') + role.expects(:gettext).never + assert_equal 'my name', role.name + end + + def test_should_remove_non_system_defined_roles_normally + role = Role.create!(:name => 'to be removed', :permissions => [], :system => false) + count = Role.count + role.destroy + assert_equal count - 1, Role.count + end + + def test_should_not_allow_to_remove_system_defined_roles + + role = Role.create!(:name => 'not to be removed', :permissions => [], :system => true) + + count = Role.count + role.destroy + assert_equal count, Role.count + + end + end diff --git a/vendor/plugins/access_control/test/schema.rb b/vendor/plugins/access_control/test/schema.rb index bf320ae..ab9f715 100644 --- a/vendor/plugins/access_control/test/schema.rb +++ b/vendor/plugins/access_control/test/schema.rb @@ -5,6 +5,8 @@ ActiveRecord::Schema.define(:version => 0) do create_table :access_control_test_roles, :force => true do |t| t.column :name, :string t.column :permissions, :string + t.column :key, :string + t.column :system, :boolean, :default => false end create_table :access_control_test_role_assignments, :force => true do |t| -- libgit2 0.21.2