diff --git a/app/controllers/admin/role_controller.rb b/app/controllers/admin/role_controller.rb index 2b2e861..51aec16 100644 --- a/app/controllers/admin/role_controller.rb +++ b/app/controllers/admin/role_controller.rb @@ -2,11 +2,11 @@ class RoleController < AdminController protect 'manage_environment_roles', :environment def index - @roles = Role.find(:all) + @roles = environment.roles.find(:all) end def show - @role = Role.find(params[:id]) + @role = environment.roles.find(params[:id]) end def new @@ -15,6 +15,7 @@ class RoleController < AdminController def create @role = Role.new(params[:role]) + @role.environment = environment if @role.save redirect_to :action => 'show', :id => @role else @@ -24,11 +25,11 @@ class RoleController < AdminController end def edit - @role = Role.find(params[:id]) + @role = environment.roles.find(params[:id]) end def update - @role = Role.find(params[:id]) + @role = environment.roles.find(params[:id]) if @role.update_attributes(params[:role]) redirect_to :action => 'show', :id => @role else @@ -38,7 +39,7 @@ class RoleController < AdminController end def destroy - @role = Role.find(params[:id]) + @role = environment.roles.find(params[:id]) if @role.destroy redirect_to :action => 'index' else diff --git a/app/controllers/my_profile/profile_members_controller.rb b/app/controllers/my_profile/profile_members_controller.rb index abbb3e7..8f29751 100644 --- a/app/controllers/my_profile/profile_members_controller.rb +++ b/app/controllers/my_profile/profile_members_controller.rb @@ -3,11 +3,11 @@ class ProfileMembersController < MyProfileController def index @members = profile.members - @member_role = Role.find_by_name('member') + @member_role = environment.roles.find_by_name('member') end def update_roles - @roles = params[:roles] ? Role.find(params[:roles]) : [] + @roles = params[:roles] ? environment.roles.find(params[:roles]) : [] @roles = @roles.select{|r| r.has_kind?('Profile') } @person = Person.find(params[:person]) if @person.define_roles(@roles, profile) @@ -26,18 +26,18 @@ class ProfileMembersController < MyProfileController def add_role @person = Person.find(params[:person]) - @role = Role.find(params[:role]) + @role = environment.roles.find(params[:role]) if @profile.affiliate(@person, @role) redirect_to :action => 'index' else @member = Person.find(params[:person]) - @roles = Role.find(:all).select{ |r| r.has_kind?('Profile') } + @roles = environment.roles.find(:all).select{ |r| r.has_kind?('Profile') } render :action => 'affiliate' end end def remove_role - @association = RoleAssignment.find(params[:id]) + @association = RoleAssignment.find(:all, :conditions => {:id => params[:id], :target_id => profile.id}) if @association.destroy flash[:notice] = 'Member succefully unassociated' else diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index b8e7db6..51d08c5 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -610,16 +610,16 @@ module ApplicationHelper def rolename_for(profile, resource) role = profile.role_assignments.find_by_resource_id(resource.id).role - content_tag('span', role.name, :style => "color: #{role_color(role)}") + content_tag('span', role.name, :style => "color: #{role_color(role, resource.environment.id)}") end - def role_color(role) + def role_color(role, env_id) case role - when Profile::Roles.admin + when Profile::Roles.admin(env_id) 'blue' - when Profile::Roles.member + when Profile::Roles.member(env_id) 'green' - when Profile::Roles.moderator + when Profile::Roles.moderator(env_id) 'gray' else 'black' diff --git a/app/models/add_member.rb b/app/models/add_member.rb index c2f03d5..4bb7635 100644 --- a/app/models/add_member.rb +++ b/app/models/add_member.rb @@ -11,7 +11,7 @@ class AddMember < Task acts_as_having_settings :roles, :field => :data def perform - self.roles ||= [Profile::Roles.member.id] + self.roles ||= [Profile::Roles.member(organization.environment.id).id] target.affiliate(requestor, self.roles.map{|i| Role.find(i)}) end diff --git a/app/models/enterprise.rb b/app/models/enterprise.rb index bfc0bdc..c6d0664 100644 --- a/app/models/enterprise.rb +++ b/app/models/enterprise.rb @@ -82,7 +82,7 @@ class Enterprise < Organization def enable(owner) return if enabled - affiliate(owner, Profile::Roles.all_roles) + affiliate(owner, Profile::Roles.all_roles(environment.id)) update_attribute(:enabled,true) if environment.replace_enterprise_template_when_enable apply_template(template) diff --git a/app/models/environment.rb b/app/models/environment.rb index c400cb4..d02e9c4 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -15,8 +15,8 @@ class Environment < ActiveRecord::Base } module Roles - def self.admin - Role.find_by_key('environment_administrator') + def self.admin(env_id) + Role.find_by_key_and_environment_id('environment_administrator', env_id) end end @@ -91,6 +91,8 @@ class Environment < ActiveRecord::Base has_many :regions + has_many :roles + acts_as_accessible def superior_intances diff --git a/app/models/profile.rb b/app/models/profile.rb index 1b55620..520c104 100644 --- a/app/models/profile.rb +++ b/app/models/profile.rb @@ -4,23 +4,28 @@ class Profile < ActiveRecord::Base module Roles - def self.admin - ::Role.find_by_key('profile_admin') + def self.admin(env_id) + find_role('admin', env_id) end - def self.member - ::Role.find_by_key('profile_member') + def self.member(env_id) + find_role('member', env_id) end - def self.moderator - ::Role.find_by_key('profile_moderator') + def self.moderator(env_id) + find_role('moderator', env_id) end - def self.owner - ::Role.find_by_key('profile_owner') + def self.owner(env_id) + find_role('owner', env_id) end - def self.editor - ::Role.find_by_key('profile_editor') + def self.editor(env_id) + find_role('editor', env_id) end - def self.all_roles - [admin, member, moderator, owner, editor] + def self.all_roles(env_id) + [admin(env_id), member(env_id), moderator(env_id), owner(env_id), editor(env_id)] + end + + private + def self.find_role(name, env_id) + ::Role.find_by_key_and_environment_id("profile_#{name}", env_id) end end @@ -463,7 +468,7 @@ class Profile < ActiveRecord::Base if self.closed? AddMember.create!(:person => person, :organization => self) else - self.affiliate(person, Profile::Roles.member) + self.affiliate(person, Profile::Roles.member(environment.id)) end else raise _("%s can't has members") % self.class.name @@ -471,17 +476,17 @@ class Profile < ActiveRecord::Base end def remove_member(person) - self.disaffiliate(person, Profile::Roles.all_roles) + self.disaffiliate(person, Profile::Roles.all_roles(environment.id)) end # adds a person as administrator os this profile def add_admin(person) - self.affiliate(person, Profile::Roles.admin) + self.affiliate(person, Profile::Roles.admin(environment.id)) end def add_moderator(person) if self.has_members? - self.affiliate(person, Profile::Roles.moderator) + self.affiliate(person, Profile::Roles.moderator(environment.id)) else raise _("%s can't has moderators") % self.class.name end @@ -600,7 +605,7 @@ class Profile < ActiveRecord::Base end def admins - self.members_by_role(Profile::Roles.admin) + self.members_by_role(Profile::Roles.admin(environment.id)) end def enable_contact? diff --git a/app/views/tasks/_add_member.rhtml b/app/views/tasks/_add_member.rhtml index 13af333..a3d8452 100644 --- a/app/views/tasks/_add_member.rhtml +++ b/app/views/tasks/_add_member.rhtml @@ -24,10 +24,10 @@

<%= _('Roles:') %>
<% - @roles = Role.find(:all).select{ |r| r.has_kind?('Profile') } + @roles = task.target.environment.roles.find(:all).select{ |r| r.has_kind?('Profile') } %> <% @roles.each do |r| %> - <%= labelled_check_box(r.name, 'task[roles][]', r.id, ( task.target.members.empty? ? true : ( r.id == Profile::Roles.member.id ) ) ) %>
+ <%= labelled_check_box(r.name, 'task[roles][]', r.id, ( task.target.members.empty? ? true : ( r.id == Profile::Roles.member(r.environment.id).id ) ) ) %>
<% end %>

diff --git a/db/migrate/069_add_enviroment_id_to_role.rb b/db/migrate/069_add_enviroment_id_to_role.rb new file mode 100644 index 0000000..3a1ff60 --- /dev/null +++ b/db/migrate/069_add_enviroment_id_to_role.rb @@ -0,0 +1,50 @@ +class Environment < ActiveRecord::Base; end +class Role < ActiveRecord::Base; end +class RoleWithEnvironment < ActiveRecord::Base + set_table_name 'roles' + belongs_to :environment +end +class RoleAssignment < ActiveRecord::Base + belongs_to :accessor, :polymorphic => true + belongs_to :target, :polymorphic => true +end + +class AddEnviromentIdToRole < ActiveRecord::Migration + def self.up + add_column :roles, :environment_id, :integer + + roles = Role.find(:all) + Environment.find(:all).each do |env| + roles.each do |role| + re = RoleWithEnvironment.new(role.attributes) + re.environment = env + re.save + RoleAssignment.find_all_by_role_id(role.id).select{|ra| (ra.target.kind_of?(Profile) ? ra.target.environment_id : ra.target.id) == env.id }.each do |ra| + ra.role_id = re.id + ra.save + end + end + end + roles.each(&:destroy) + end + + def self.down + roles_by_name = {} + roles_by_key = {} + roles_with_environment = RoleWithEnvironment.find(:all) + roles_with_environment.each do |re| + if re.key + role = roles_by_name[re.key] || roles_by_key[re.name] || Role.create(re.attributes) + roles_by_name[role.name] ||= roles_by_key[role.key] ||= role + end + role = roles_by_name[re.name] ||= Role.create(re.attributes) unless role + RoleAssignment.find_all_by_role_id(re.id).each do |ra| + ra.role_id = role.id + ra.save + end + end + roles_with_environment.each(&:destroy) + + remove_column :roles, :environment_id, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index f34944d..e81ccd6 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -9,7 +9,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 68) do +ActiveRecord::Schema.define(:version => 69) do create_table "article_versions", :force => true do |t| t.integer "article_id" @@ -279,7 +279,8 @@ ActiveRecord::Schema.define(:version => 68) do t.string "name" t.text "permissions" t.string "key" - t.boolean "system", :default => false + t.boolean "system", :default => false + t.integer "environment_id" end create_table "taggings", :force => true do |t| diff --git a/lib/tasks/populate.rake b/lib/tasks/populate.rake index d80dbe6..b5955ac 100644 --- a/lib/tasks/populate.rake +++ b/lib/tasks/populate.rake @@ -13,18 +13,20 @@ namespace :db do end def new_permissions - admin = Profile::Roles.admin + e = Environment.default + admin = Profile::Roles.admin(e.id) admin.permissions += ['manage_friends', 'validate_enterprise', 'perform_task'] admin.save - moderator = Profile::Roles.moderator + moderator = Profile::Roles.moderator(e.id) moderator.permissions += ['manage_friends', 'perform_task'] moderator.save end def create_roles + e = Environment.default # Environment administrator! - Role.create!(:key => 'environment_administrator', :name => N_('Environment Administrator'), :permissions => [ + Role.create!(:key => 'environment_administrator', :name => N_('Environment Administrator'), :environment => e, :permissions => [ 'view_environment_admin_panel', 'edit_environment_features', 'edit_environment_design', @@ -39,7 +41,7 @@ def create_roles 'manage_products', 'edit_appearance', ]) - Role.create!(:key => 'profile_admin', :name => N_('Profile Administrator'), :permissions => [ + Role.create!(:key => 'profile_admin', :name => N_('Profile Administrator'), :environment => e, :permissions => [ 'edit_profile', 'destroy_profile', 'manage_memberships', @@ -49,13 +51,13 @@ def create_roles 'edit_appearance', ]) # members for enterprises, communities etc - Role.create!(:key => "profile_member", :name => N_('Member'), :permissions => [ + Role.create!(:key => "profile_member", :name => N_('Member'), :environment => e, :permissions => [ 'edit_profile', 'post_content', 'manage_products' ]) # moderators for enterprises, communities etc - Role.create!(:key => 'profile_moderator', :name => N_('Moderator'), :permissions => [ + Role.create!(:key => 'profile_moderator', :name => N_('Moderator'), :environment => e, :permissions => [ 'manage_memberships', 'edit_profile_design', 'manage_products' diff --git a/script/anhetegua b/script/anhetegua index 131471f..8b85bc2 100755 --- a/script/anhetegua +++ b/script/anhetegua @@ -150,19 +150,19 @@ colivre = new_validator(ba, "Colivre", 'colivre', Enterprise) #forum_rs = new_validator(rs, 'Forum Gaucho de Economia Solidaria', 'ecosolrs') # Role for own things -owner_role = Profile::Roles.admin +owner_role = Profile::Roles.admin(Environment.default.id) # Sample user and sample enterprise owned by him ze = User.create!(:login => 'ze', :email => 'ze@localhost.localdomain', :password => 'test', :password_confirmation => 'test').person -Environment.default.affiliate(ze, Environment::Roles.admin) +Environment.default.affiliate(ze, Environment::Roles.admin(Environment.default.id)) empa = Enterprise.create!(:name => 'Cooperativa A', :identifier => 'coop_a') empa.affiliate(ze, owner_role) colivre.affiliate(ze, owner_role) -member_role = Profile::Roles.member -moderator_role = Profile::Roles.moderator +member_role = Profile::Roles.member(Environment.default.id) +moderator_role = Profile::Roles.moderator(Environment.default.id) # product categories produtos = ProductCategory.create!(:name => 'Produtos', :environment => Environment.default) diff --git a/test/fixtures/roles.yml b/test/fixtures/roles.yml index f31c12c..8efed65 100644 --- a/test/fixtures/roles.yml +++ b/test/fixtures/roles.yml @@ -1,11 +1,13 @@ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html one: id: 1 + environment_id: 1 name: 'member' permissions: - post_content two: id: 2 + environment_id: 1 name: 'owner' permissions: - menage_memberships @@ -14,11 +16,13 @@ two: - edit_profile three: id: 3 + environment_id: 1 name: 'moderator' permissions: - manage_memberships four: id: 4 + environment_id: 1 name: 'admin' permissions: - view_environment_admin_panel @@ -31,6 +35,7 @@ four: - perform_task profile_admin: id: 5 + environment_id: 1 key: 'profile_admin' name: 'Profile Administrator' system: true @@ -43,6 +48,7 @@ profile_admin: - view_private_content profile_member: id: 6 + environment_id: 1 key: 'profile_member' name: 'Profile Member' system: true @@ -52,6 +58,7 @@ profile_member: - manage_products profile_moderator: id: 7 + environment_id: 1 key: 'profile_moderator' name: 'Profile Moderator' system: true @@ -60,6 +67,7 @@ profile_moderator: - view_private_content environment_administrator: id: 8 + environment_id: 1 key: 'environment_administrator' name: 'Environment administrator' system: true diff --git a/test/functional/cms_controller_test.rb b/test/functional/cms_controller_test.rb index bca0f7d..5f18631 100644 --- a/test/functional/cms_controller_test.rb +++ b/test/functional/cms_controller_test.rb @@ -626,7 +626,7 @@ class CmsControllerTest < Test::Unit::TestCase should 'load communities for that the user belongs' do c = Community.create!(:name => 'test comm', :identifier => 'test_comm') - c.affiliate(profile, Profile::Roles.all_roles) + c.affiliate(profile, Profile::Roles.all_roles(c.environment.id)) a = profile.articles.create!(:name => 'something intresting', :body => 'ruby on rails') get :publish, :profile => profile.identifier, :id => a.id @@ -637,7 +637,7 @@ class CmsControllerTest < Test::Unit::TestCase should 'publish the article in the selected community if community is not moderated' do c = Community.create!(:name => 'test comm', :identifier => 'test_comm', :moderated_articles => false) - c.affiliate(profile, Profile::Roles.all_roles) + c.affiliate(profile, Profile::Roles.all_roles(c.environment.id)) a = profile.articles.create!(:name => 'something intresting', :body => 'ruby on rails') assert_difference PublishedArticle, :count do @@ -648,7 +648,7 @@ class CmsControllerTest < Test::Unit::TestCase should 'create a task for article approval if community is moderated' do c = Community.create!(:name => 'test comm', :identifier => 'test_comm', :moderated_articles => true) - c.affiliate(profile, Profile::Roles.all_roles) + c.affiliate(profile, Profile::Roles.all_roles(c.environment.id)) a = profile.articles.create!(:name => 'something intresting', :body => 'ruby on rails') assert_no_difference PublishedArticle, :count do diff --git a/test/functional/content_viewer_controller_test.rb b/test/functional/content_viewer_controller_test.rb index 3300302..fe890c5 100644 --- a/test/functional/content_viewer_controller_test.rb +++ b/test/functional/content_viewer_controller_test.rb @@ -490,7 +490,7 @@ class ContentViewerControllerTest < Test::Unit::TestCase person = create_user('test_user').person profile = Profile.create!(:name => 'test profile', :identifier => 'test_profile') intranet = Folder.create!(:name => 'my_intranet', :profile => profile, :public_article => false) - profile.affiliate(person, Profile::Roles.member) + profile.affiliate(person, Profile::Roles.member(profile.environment.id)) login_as('test_user') @request.stubs(:ssl?).returns(true) @@ -503,7 +503,7 @@ class ContentViewerControllerTest < Test::Unit::TestCase person = create_user('test_user').person profile = Profile.create!(:name => 'test profile', :identifier => 'test_profile') intranet = Folder.create!(:name => 'my_intranet', :profile => profile, :public_article => false) - profile.affiliate(person, Profile::Roles.moderator) + profile.affiliate(person, Profile::Roles.moderator(profile.environment.id)) login_as('test_user') @request.stubs(:ssl?).returns(true) @@ -516,7 +516,7 @@ class ContentViewerControllerTest < Test::Unit::TestCase person = create_user('test_user').person profile = Profile.create!(:name => 'test profile', :identifier => 'test_profile') intranet = Folder.create!(:name => 'my_intranet', :profile => profile, :public_article => false) - profile.affiliate(person, Profile::Roles.admin) + profile.affiliate(person, Profile::Roles.admin(profile.environment.id)) login_as('test_user') @request.stubs(:ssl?).returns(true) @@ -566,7 +566,7 @@ class ContentViewerControllerTest < Test::Unit::TestCase should 'not show link to publication on view if not on person profile' do prof = Community.create!(:name => 'test comm', :identifier => 'test_comm') page = prof.articles.create!(:name => 'myarticle', :body => 'the body of the text') - prof.affiliate(profile, Profile::Roles.all_roles) + prof.affiliate(profile, Profile::Roles.all_roles(prof.environment.id)) login_as(profile.identifier) get :view_page, :profile => prof.identifier, :page => ['myarticle'] diff --git a/test/functional/memberships_controller_test.rb b/test/functional/memberships_controller_test.rb index ce631c0..84d78a2 100644 --- a/test/functional/memberships_controller_test.rb +++ b/test/functional/memberships_controller_test.rb @@ -148,7 +148,7 @@ class MembershipsControllerTest < Test::Unit::TestCase should 'current user is added as admin after create new community' do post :new_community, :profile => profile.identifier, :community => { :name => 'My shiny new community', :description => 'This is a community devoted to anything interesting we find in the internet '} - assert_equal Profile::Roles.admin, profile.find_roles(Community.find_by_identifier('my-shiny-new-community')).first.role + assert_equal Profile::Roles.admin(profile.environment.id), profile.find_roles(Community.find_by_identifier('my-shiny-new-community')).first.role end should 'display button to create community' do diff --git a/test/functional/profile_editor_controller_test.rb b/test/functional/profile_editor_controller_test.rb index ec4d926..7dc1269 100644 --- a/test/functional/profile_editor_controller_test.rb +++ b/test/functional/profile_editor_controller_test.rb @@ -13,7 +13,7 @@ class ProfileEditorControllerTest < Test::Unit::TestCase @request.stubs(:ssl?).returns(true) @response = ActionController::TestResponse.new @profile = create_user('default_user').person - Environment.default.affiliate(@profile, [Environment::Roles.admin] + Profile::Roles.all_roles) + Environment.default.affiliate(@profile, [Environment::Roles.admin(Environment.default.id)] + Profile::Roles.all_roles(Environment.default.id)) login_as('default_user') end attr_reader :profile diff --git a/test/functional/profile_members_controller_test.rb b/test/functional/profile_members_controller_test.rb index c4de14b..f25e961 100644 --- a/test/functional/profile_members_controller_test.rb +++ b/test/functional/profile_members_controller_test.rb @@ -63,8 +63,8 @@ class ProfileMembersControllerTest < Test::Unit::TestCase should 'update roles' do ent = Enterprise.create!(:identifier => 'test_enterprise', :name => 'test enterprise') - role1 = Role.create!(:name => 'member_role', :permissions => ['edit_profile']) - role2 = Role.create!(:name => 'owner_role', :permissions => ['edit_profile', 'destroy_profile']) + role1 = Role.create!(:name => 'member_role', :permissions => ['edit_profile'], :environment => ent.environment) + role2 = Role.create!(:name => 'owner_role', :permissions => ['edit_profile', 'destroy_profile'], :environment => ent.environment) member = create_user('test_member').person member.add_role(role1, ent) diff --git a/test/functional/tasks_controller_test.rb b/test/functional/tasks_controller_test.rb index 4067fe8..9891001 100644 --- a/test/functional/tasks_controller_test.rb +++ b/test/functional/tasks_controller_test.rb @@ -78,19 +78,19 @@ class TasksControllerTest < Test::Unit::TestCase end should 'display member role checked if target has members' do - profile.affiliate(profile, Profile::Roles.admin) + profile.affiliate(profile, Profile::Roles.admin(profile.environment.id)) assert_equal 1, profile.members.size t = AddMember.create!(:person => profile, :organization => profile) get :index, :profile => profile.identifier - assert_tag :tag => 'input', :attributes => { :name => 'task[roles][]', :checked => 'checked', :value => Profile::Roles.member.id } + assert_tag :tag => 'input', :attributes => { :name => 'task[roles][]', :checked => 'checked', :value => Profile::Roles.member(profile.environment.id).id } end should 'display roles besides role member unchecked if target has members' do - profile.affiliate(profile, Profile::Roles.admin) + profile.affiliate(profile, Profile::Roles.admin(profile.environment.id)) assert_equal 1, profile.members.size t = AddMember.create!(:person => profile, :organization => profile) get :index, :profile => profile.identifier - Role.find(:all).select{ |r| r.has_kind?('Profile') and r.id != Profile::Roles.member.id }.each do |i| + Role.find(:all).select{ |r| r.has_kind?('Profile') and r.id != Profile::Roles.member(profile.environment.id).id }.each do |i| assert_no_tag :tag => 'input', :attributes => { :name => 'task[roles][]', :checked => 'checked', :value => i.id } end end @@ -157,7 +157,7 @@ class TasksControllerTest < Test::Unit::TestCase PublishedArticle.destroy_all c = Community.create!(:name => 'test comm', :moderated_articles => false) @controller.stubs(:profile).returns(c) - c.affiliate(profile, Profile::Roles.all_roles) + c.affiliate(profile, Profile::Roles.all_roles(profile.environment.id)) article = profile.articles.create!(:name => 'something interesting', :body => 'ruby on rails') t = ApproveArticle.create!(:name => 'test name', :article => article, :target => c, :requestor => profile) @@ -170,7 +170,7 @@ class TasksControllerTest < Test::Unit::TestCase c = Community.create!(:name => 'test comm', :moderated_articles => false) @controller.stubs(:profile).returns(c) folder = c.articles.create!(:name => 'test folder', :type => 'Folder') - c.affiliate(profile, Profile::Roles.all_roles) + c.affiliate(profile, Profile::Roles.all_roles(profile.environment.id)) article = profile.articles.create!(:name => 'something interesting', :body => 'ruby on rails') t = ApproveArticle.create!(:name => 'test name', :article => article, :target => c, :requestor => profile) diff --git a/test/unit/add_member_test.rb b/test/unit/add_member_test.rb index 1d8c8d0..c676345 100644 --- a/test/unit/add_member_test.rb +++ b/test/unit/add_member_test.rb @@ -76,7 +76,7 @@ class AddMemberTest < ActiveSupport::TestCase p = create_user('testuser1').person c = Community.create!(:name => 'community_test') - roles = [Profile::Roles.member, Profile::Roles.admin] + roles = [Profile::Roles.member(c.environment.id), Profile::Roles.admin(c.environment.id)] TaskMailer.stubs(:deliver_target_notification) task = AddMember.create!(:roles => roles.map(&:id), :person => p, :organization => c) task.finish diff --git a/test/unit/application_helper_test.rb b/test/unit/application_helper_test.rb index 8a56a3d..3f5c3c2 100644 --- a/test/unit/application_helper_test.rb +++ b/test/unit/application_helper_test.rb @@ -73,16 +73,16 @@ class ApplicationHelperTest < Test::Unit::TestCase end should 'role color for admin role' do - assert_equal 'blue', role_color(Profile::Roles.admin) + assert_equal 'blue', role_color(Profile::Roles.admin(Environment.default.id), Environment.default.id) end should 'role color for member role' do - assert_equal 'green', role_color(Profile::Roles.member) + assert_equal 'green', role_color(Profile::Roles.member(Environment.default.id), Environment.default.id) end should 'role color for moderator role' do - assert_equal 'gray', role_color(Profile::Roles.moderator) + assert_equal 'gray', role_color(Profile::Roles.moderator(Environment.default.id), Environment.default.id) end should 'default role color' do - assert_equal 'black', role_color('none') + assert_equal 'black', role_color('none', Environment.default.id) end should 'rolename for' do diff --git a/test/unit/article_test.rb b/test/unit/article_test.rb index 8e17434..1f42c05 100644 --- a/test/unit/article_test.rb +++ b/test/unit/article_test.rb @@ -452,7 +452,7 @@ class ArticleTest < Test::Unit::TestCase profile = Profile.create!(:name => 'test profile', :identifier => 'test_profile') article = Article.create!(:name => 'test article', :profile => profile, :public_article => false) person = create_user('test_user').person - profile.affiliate(person, Profile::Roles.member) + profile.affiliate(person, Profile::Roles.member(profile.environment.id)) assert !article.display_to?(person) end @@ -461,7 +461,7 @@ class ArticleTest < Test::Unit::TestCase profile = Profile.create!(:name => 'test profile', :identifier => 'test_profile') article = Article.create!(:name => 'test article', :profile => profile, :public_article => false) person = create_user('test_user').person - profile.affiliate(person, Profile::Roles.admin) + profile.affiliate(person, Profile::Roles.admin(profile.environment.id)) assert article.display_to?(person) end @@ -470,7 +470,7 @@ class ArticleTest < Test::Unit::TestCase profile = Profile.create!(:name => 'test profile', :identifier => 'test_profile') article = Article.create!(:name => 'test article', :profile => profile, :public_article => false) person = create_user('test_user').person - profile.affiliate(person, Profile::Roles.moderator) + profile.affiliate(person, Profile::Roles.moderator(profile.environment.id)) assert article.display_to?(person) end @@ -479,7 +479,7 @@ class ArticleTest < Test::Unit::TestCase profile = Profile.create!(:name => 'test profile', :identifier => 'test_profile', :public_profile => false) article = Article.create!(:name => 'test article', :profile => profile, :public_article => true) person1 = create_user('test_user1').person - profile.affiliate(person1, Profile::Roles.member) + profile.affiliate(person1, Profile::Roles.member(profile.environment.id)) person2 = create_user('test_user2').person assert !article.display_to?(nil) diff --git a/test/unit/enterprises_block_test.rb b/test/unit/enterprises_block_test.rb index fd9ea3b..b59ca59 100644 --- a/test/unit/enterprises_block_test.rb +++ b/test/unit/enterprises_block_test.rb @@ -56,8 +56,8 @@ class EnterprisesBlockTest < Test::Unit::TestCase should 'not list private enterprises in profile' do person = create_user('test_user').person - role = Profile::Roles.member e1 = Enterprise.create!(:name => 'test1', :identifier => 'test1', :public_profile => true) + role = Profile::Roles.member(e1.environment.id) e1.affiliate(person, role) e2 = Enterprise.create!(:name => 'test2', :identifier => 'test2', :public_profile => false) #private profile e2.affiliate(person, role) diff --git a/test/unit/environment_test.rb b/test/unit/environment_test.rb index 10e9022..8e00ba3 100644 --- a/test/unit/environment_test.rb +++ b/test/unit/environment_test.rb @@ -308,8 +308,8 @@ class EnvironmentTest < Test::Unit::TestCase end should 'have admin role' do - Role.expects(:find_by_key).with('environment_administrator').returns(Role.new) - assert_kind_of Role, Environment::Roles.admin + Role.expects(:find_by_key_and_environment_id).with('environment_administrator', Environment.default.id).returns(Role.new) + assert_kind_of Role, Environment::Roles.admin(Environment.default.id) end should 'have products through enterprises' do @@ -745,4 +745,22 @@ class EnvironmentTest < Test::Unit::TestCase assert_equal [], e.portal_folders end + + should 'have roles with names independent of other environments' do + e1 = Environment.create!(:name => 'a test environment') + role1 = Role.create!(:name => 'test_role', :environment => e1) + e2 = Environment.create!(:name => 'another test environment') + role2 = Role.new(:name => 'test_role', :environment => e2) + + assert_valid role2 + end + + should 'have roles with keys independent of other environments' do + e1 = Environment.create!(:name => 'a test environment') + role1 = Role.create!(:name => 'test_role', :environment => e1, :key => 'a_member') + e2 = Environment.create!(:name => 'another test environment') + role2 = Role.new(:name => 'test_role', :environment => e2, :key => 'a_member') + + assert_valid role2 + end end diff --git a/test/unit/profile_test.rb b/test/unit/profile_test.rb index d2b3b31..b087b61 100644 --- a/test/unit/profile_test.rb +++ b/test/unit/profile_test.rb @@ -337,18 +337,18 @@ class ProfileTest < Test::Unit::TestCase end should 'have administator role' do - Role.expects(:find_by_key).with('profile_admin').returns(Role.new) - assert_kind_of Role, Profile::Roles.admin + Role.expects(:find_by_key_and_environment_id).with('profile_admin', Environment.default.id).returns(Role.new) + assert_kind_of Role, Profile::Roles.admin(Environment.default.id) end should 'have member role' do - Role.expects(:find_by_key).with('profile_member').returns(Role.new) - assert_kind_of Role, Profile::Roles.member + Role.expects(:find_by_key_and_environment_id).with('profile_member', Environment.default.id).returns(Role.new) + assert_kind_of Role, Profile::Roles.member(Environment.default.id) end should 'have moderator role' do - Role.expects(:find_by_key).with('profile_moderator').returns(Role.new) - assert_kind_of Role, Profile::Roles.moderator + Role.expects(:find_by_key_and_environment_id).with('profile_moderator', Environment.default.id).returns(Role.new) + assert_kind_of Role, Profile::Roles.moderator(Environment.default.id) end should 'not have members by default' do @@ -768,9 +768,9 @@ class ProfileTest < Test::Unit::TestCase end should 'not return nil members when a member is removed from system' do - p = Profile.create!(:name => 'test profile', :identifier => 'test_profile') + p = Community.create!(:name => 'test community', :identifier => 'test_comm') member = create_user('test_user').person - p.affiliate(member, Profile::Roles.member) + p.add_member(member) member.destroy p.reload @@ -905,7 +905,7 @@ class ProfileTest < Test::Unit::TestCase should 'remove member with many roles' do person = create_user('test_user').person community = Community.create!(:name => 'Boca do Siri', :identifier => 'boca_do_siri') - community.affiliate(person, Profile::Roles.all_roles) + community.affiliate(person, Profile::Roles.all_roles(community.environment.id)) community.remove_member(person) @@ -1267,8 +1267,8 @@ class ProfileTest < Test::Unit::TestCase task1 = Task.create!(:requestor => person, :target => env) task2 = Task.create!(:requestor => person, :target => another) - another.affiliate(person, Environment::Roles.admin) - env.affiliate(person, Environment::Roles.admin) + another.affiliate(person, Environment::Roles.admin(another.id)) + env.affiliate(person, Environment::Roles.admin(env.id)) Person.any_instance.stubs(:is_admin?).returns(true) diff --git a/vendor/plugins/access_control/lib/role.rb b/vendor/plugins/access_control/lib/role.rb index 0822436..bc410d0 100644 --- a/vendor/plugins/access_control/lib/role.rb +++ b/vendor/plugins/access_control/lib/role.rb @@ -1,10 +1,11 @@ class Role < ActiveRecord::Base has_many :role_assignments + belongs_to :environment serialize :permissions, Array validates_presence_of :name - validates_uniqueness_of :name - validates_uniqueness_of :key, :if => lambda { |role| !role.key.blank? } + validates_uniqueness_of :name, :scope => :environment_id + validates_uniqueness_of :key, :if => lambda { |role| !role.key.blank? }, :scope => :environment_id def initialize(*args) super(*args) -- libgit2 0.21.2