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