Commit 46cf13bf0a994daa8a353067422d4a1077d2afa5
1 parent
6a007a4b
Exists in
master
and in
29 other branches
ActionItem111: made the changes to allow the links be shown based on witch permissions the user have
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@724 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
16 changed files
with
182 additions
and
17 deletions
Show diff stats
app/controllers/environment_admin/environment_role_manager_controller.rb
0 → 100644
... | ... | @@ -0,0 +1,67 @@ |
1 | +class EnvironmentRoleManagerController < ApplicationController | |
2 | + def index | |
3 | + @admins = Person.find(:all, :conditions => ['role_assignments.resource_type = ?', 'Environment'], :include => :role_assignments ) | |
4 | + end | |
5 | + | |
6 | + def change_roles | |
7 | + @admin = Person.find(params[:id]) | |
8 | + @roles = Role.find(:all).select{ |r| r.has_kind?(:environment) } | |
9 | + end | |
10 | + | |
11 | + def update_roles | |
12 | + @roles = params[:roles] ? Role.find(params[:roles]) : [] | |
13 | + @person = Person.find(params[:person]) | |
14 | + if @person.define_roles(@roles, environment) | |
15 | + flash[:notice] = _('Roles successfuly updated') | |
16 | + else | |
17 | + flash[:notice] = _('Couldn\'t change the roles') | |
18 | + end | |
19 | + redirect_to :action => :index | |
20 | + end | |
21 | + | |
22 | + def change_role | |
23 | + @roles = Role.find(:all).select{ |r| r.has_kind?(:environment) } | |
24 | + @admin = Person.find(params[:id]) | |
25 | + @associations = RoleAssignment.find(:all, :conditions => {:accessor_id => @admin, | |
26 | + :accessor_type => @admin.class.base_class.name, | |
27 | + :resource_id => environment, | |
28 | + :resource_type => environment.class.base_class.name}) | |
29 | + end | |
30 | + | |
31 | + def add_role | |
32 | + @person = Person.find(params[:person]) | |
33 | + @role = Role.find(params[:role]) | |
34 | + if environment.affiliate(@person, @role) | |
35 | + redirect_to :action => 'index' | |
36 | + else | |
37 | + @admin = Person.find(params[:person]) | |
38 | + @roles = Role.find(:all).select{ |r| r.has_kind?(:environment) } | |
39 | + render :action => 'affiliate' | |
40 | + end | |
41 | + end | |
42 | + | |
43 | + def remove_role | |
44 | + @association = RoleAssignment.find(params[:id]) | |
45 | + if @association.destroy | |
46 | + flash[:notice] = _('Member succefully unassociated') | |
47 | + else | |
48 | + flash[:notice] = _('Failed to unassociate member') | |
49 | + end | |
50 | + redirect_to :aciton => 'index' | |
51 | + end | |
52 | + | |
53 | + def unassociate | |
54 | + @association = RoleAssignment.find(params[:id]) | |
55 | + if @association.destroy | |
56 | + flash[:notice] = _('Member succefully unassociated') | |
57 | + else | |
58 | + flash[:notice] = _('Failed to unassociate member') | |
59 | + end | |
60 | + redirect_to :aciton => 'index' | |
61 | + end | |
62 | + | |
63 | + def make_admin | |
64 | + @people = Person.find(:all) | |
65 | + @roles = Role.find(:all).select{|r|r.has_kind?(:environment)} | |
66 | + end | |
67 | +end | ... | ... |
app/controllers/profile_admin/profile_members_controller.rb
... | ... | @@ -13,9 +13,9 @@ class ProfileMembersController < ProfileAdminController |
13 | 13 | @roles = Role.find(params[:roles]) |
14 | 14 | @person = Person.find(params[:person]) |
15 | 15 | if @person.define_roles(@roles, profile) |
16 | - flash[:notice] = 'Roles successfuly updated' | |
16 | + flash[:notice] = _('Roles successfuly updated') | |
17 | 17 | else |
18 | - flash[:notice] = 'Couldn\'t change the roles' | |
18 | + flash[:notice] = _('Couldn\'t change the roles') | |
19 | 19 | end |
20 | 20 | redirect_to :action => :index |
21 | 21 | end | ... | ... |
app/controllers/public/account_controller.rb
... | ... | @@ -16,7 +16,8 @@ class AccountController < PublicController |
16 | 16 | self.current_user.remember_me |
17 | 17 | cookies[:auth_token] = { :value => self.current_user.remember_token , :expires => self.current_user.remember_token_expires_at } |
18 | 18 | end |
19 | - redirect_back_or_default(:controller => '/account', :action => 'index') | |
19 | +# redirect_back_or_default(:controller => '/account', :action => 'index') | |
20 | + redirect_back_or_default(homepage_path(:profile => current_user.login)) | |
20 | 21 | flash[:notice] = _("Logged in successfully") |
21 | 22 | else |
22 | 23 | flash[:notice] = _('Incorrect username or password') | ... | ... |
app/helpers/application_helper.rb
... | ... | @@ -117,7 +117,8 @@ module ApplicationHelper |
117 | 117 | links = [ |
118 | 118 | ( link_to_homepage(current_user.login) ), |
119 | 119 | ( link_to(_('My account'), { :controller => 'account' }) ), |
120 | - ( link_to(_('Admin'), { :controller => 'admin_panel' }) ), | |
120 | + ( link_to_myprofile _('My Enterprises'), {:controller => 'membership_editor'} ), | |
121 | + ( link_to(_('Admin'), { :controller => 'admin_panel' }) if current_user.person.role_assignments.map{|ra| ra.role.permissions}.any?{|ps|ps.any?{|p|ActiveRecord::Base::PERMISSIONS[:environment].keys.include?(p)}}), | |
121 | 122 | ].join("\n") |
122 | 123 | content_tag('span', links, :id => 'user_links') |
123 | 124 | end |
... | ... | @@ -171,33 +172,47 @@ module ApplicationHelper |
171 | 172 | ] |
172 | 173 | end |
173 | 174 | |
174 | - def profile_links | |
175 | + def person_links | |
175 | 176 | links = [ |
176 | 177 | [(link_to_myprofile _('Edit visual design'), :controller => 'profile_editor', :action => 'design_editor'), 'edit_profile_design', profile], |
177 | - [(link_to_myprofile _('Edit informations'), :controller => 'profile_editor'), 'edit_profile', profile], | |
178 | + [(link_to_myprofile _('Edit profile'), :controller => 'profile_editor'), 'edit_profile', profile], | |
178 | 179 | [(link_to_myprofile _('Manage content'), :controller => 'cms'), 'post_content', profile], |
179 | 180 | ] |
180 | 181 | |
181 | - if profile.kind_of?(Enterprise) | |
182 | - links << [(link_to_myprofile _('Exclude'), :controller => 'enterprise_editor', :action => 'destroy'), 'edit_profile', profile] | |
183 | - else | |
184 | - links | |
185 | - end | |
182 | + end | |
183 | + | |
184 | + | |
185 | + def enterprise_links | |
186 | + links = [ | |
187 | + [(link_to_myprofile _('Edit visual design'), :controller => 'profile_editor', :action => 'design_editor'), 'edit_profile_design', profile], | |
188 | + [(link_to_myprofile _('Edit informations'), :controller => 'profile_editor'), 'edit_profile', profile], | |
189 | + [(link_to_myprofile _('Manage content'), :controller => 'cms'), 'post_content', profile], | |
190 | + [(link_to_myprofile _('Exclude'), :controller => 'enterprise_editor', :action => 'destroy'), 'edit_profile', profile], | |
191 | + ] | |
186 | 192 | end |
187 | 193 | |
188 | 194 | |
189 | 195 | #FIXME: find a way of accessing environment from here |
190 | 196 | def user_options |
197 | + profile = params[:profile] | |
191 | 198 | case params[:controller] |
192 | 199 | when 'admin_panel' |
193 | 200 | admin_links |
194 | 201 | when 'membership_editor' |
195 | 202 | membership_links |
196 | 203 | when 'profile_editor' |
197 | - profile_links | |
204 | + if profile.kind_of?(Enterprise) | |
205 | + enterprise_links | |
206 | + elsif profile.kind_of?(Person) | |
207 | + person_links | |
208 | + else | |
209 | + [] | |
210 | + end | |
211 | + when 'content_viewer' | |
212 | + person_links | |
198 | 213 | else |
199 | 214 | [] |
200 | - end.map{|l| link_if_permitted(l[0], l[1], l[3]) } | |
215 | + end.map{|l| link_if_permitted(l[0], l[1], l[2]) } | |
201 | 216 | end |
202 | 217 | |
203 | 218 | def footer |
... | ... | @@ -281,5 +296,4 @@ module ApplicationHelper |
281 | 296 | ] |
282 | 297 | select_tag "#{object}[#{method}]", options_for_select(options, @page.filter_type || Comatose.config.default_filter), { :id=> "#{object}_#{method}" }.merge(html_options) |
283 | 298 | end |
284 | - | |
285 | 299 | end | ... | ... |
app/models/environment.rb
... | ... | @@ -3,6 +3,14 @@ |
3 | 3 | # domains. |
4 | 4 | class Environment < ActiveRecord::Base |
5 | 5 | |
6 | + PERMISSIONS[:environment] = { | |
7 | + 'edit_environment_features' => N_('Edit environment features'), | |
8 | + 'edit_environment_design' => N_('Edit environment design'), | |
9 | + 'manage_environment_categories' => N_('Manage environment categories'), | |
10 | + 'manage_environment_roles' => N_('Manage environment roles'), | |
11 | + 'manage_environment_validators' => N_('Manage environment validators'), | |
12 | + } | |
13 | + | |
6 | 14 | # returns the available features for a Environment, in the form of a |
7 | 15 | # hash, with pairs in the form <tt>'feature_name' => 'Feature name'</tt>. |
8 | 16 | def self.available_features | ... | ... |
app/models/profile.rb
... | ... | @@ -8,6 +8,7 @@ class Profile < ActiveRecord::Base |
8 | 8 | 'destroy_profile' => N_('Destroy profile'), |
9 | 9 | 'manage_memberships' => N_('Manage memberships'), |
10 | 10 | 'post_content' => N_('Post content'), |
11 | + 'edit_profile_design' => N_('Edit profile design'), | |
11 | 12 | } |
12 | 13 | |
13 | 14 | after_create do |profile| | ... | ... |
... | ... | @@ -0,0 +1,9 @@ |
1 | +<h2> <%= @member.name %> </h2> | |
2 | + | |
3 | +<% form_tag( {:action => 'give_role'}, {:method => :post}) do %> | |
4 | + <%= select_tag 'role', options_for_select(@roles.map{|r|[r.name,r.id]}) %> | |
5 | + <%= hidden_field_tag 'person', current_user.person.id %> | |
6 | + <%= submit_tag _('Affiliate') %> | |
7 | +<% end %> | |
8 | + | |
9 | +<%= link_to _('Back'), :action => 'index' %> | ... | ... |
... | ... | @@ -0,0 +1,13 @@ |
1 | +<%= _('Changing role of %s') % @admin.name %> | |
2 | + | |
3 | +<% labelled_form_for :member, @admin, :url => {:action => 'update_roles'} do |f| %> | |
4 | + | |
5 | + <%= _('Roles: ') %> <br> | |
6 | + <% @roles.each do |r| %> | |
7 | + <%= labelled_form_field(r.name, (check_box_tag "roles[]", r.id, @admin.role_assignments.map{|ra|ra.role}.include?(r))) %> | |
8 | + <% end %> | |
9 | + <%= hidden_field_tag 'person', @admin.id %> | |
10 | + | |
11 | + <%= submit_tag _('Save changes') %> | |
12 | + <%= link_to _('Cancel'), :action => 'index' %> | |
13 | +<% end %> | ... | ... |
... | ... | @@ -0,0 +1,13 @@ |
1 | +<h2> <%= _('Listing Administrators') %> </h2> | |
2 | + | |
3 | +<%= link_to _('Make new admin'), :action => 'make_admin' %> | |
4 | + | |
5 | +<ul> | |
6 | + <% @admins.each do |a| %> | |
7 | + <li> <%= a.name %> | |
8 | + <%= link_to _('Edit member role'), :action => 'change_role', :id => a %> | |
9 | + <%= link_to _('Remove member'), :action => 'unassociate', :id => a %></li> | |
10 | + <% end %> | |
11 | +</ul> | |
12 | + | |
13 | +<%= link_to _('Back'), :controller => 'admin_panel' %> | ... | ... |
... | ... | @@ -0,0 +1,13 @@ |
1 | +<h2> <% _('Make new admin') %> </h2> | |
2 | + | |
3 | +<% labelled_form_for :person, @person, :url => {:action => 'update_roles'} do |f| %> | |
4 | + <%= _('Admin') %> <br> | |
5 | + <% @people.each do |p| %> | |
6 | + <%= labelled_form_field(p.name, (radio_button_tag "person", p.id)) %> | |
7 | + <% end %> | |
8 | + <%= _('Roles: ') %> <br> | |
9 | + <% @roles.each do |r| %> | |
10 | + <%= labelled_form_field(r.name, (check_box_tag "roles[]", r.id)) %> | |
11 | + <% end %> | |
12 | +<%= submit_tag _('Make') %> | |
13 | +<% end %> | ... | ... |
app/views/layouts/application.rhtml
app/views/role/_form.rhtml
... | ... | @@ -5,7 +5,7 @@ |
5 | 5 | <%= f.text_field :name %> |
6 | 6 | |
7 | 7 | <%= _('Permissions: ') %> <br> |
8 | - <% Profile::PERMISSIONS[:profile].keys.each do |p| %> | |
8 | + <% permissions.keys.each do |p| %> | |
9 | 9 | <%= labelled_form_field(permission_name(p), (check_box_tag "role[permissions][]", p, @role.has_permission?(p))) %> |
10 | 10 | <% end %> |
11 | 11 | ... | ... |
app/views/role/new.rhtml
1 | 1 | <h2> <%= _('New Role') %> </h2> |
2 | 2 | |
3 | -<%= render :partial => 'form', :locals => { :mode => :new } %> | |
3 | +<% ActiveRecord::Base::PERMISSIONS.keys.each do |perm_class| %> | |
4 | + <h3> <%= perm_class %> </h3> | |
5 | + <%= render :partial => 'form', :locals => { :mode => :new, :permissions => ActiveRecord::Base::PERMISSIONS[perm_class] } %> | |
6 | +<% end %> | ... | ... |
public/stylesheets/menu.css
test/functional/environment_role_manager_controller_test.rb
0 → 100644
... | ... | @@ -0,0 +1,18 @@ |
1 | +require File.dirname(__FILE__) + '/../test_helper' | |
2 | +require 'environment_role_manager_controller' | |
3 | + | |
4 | +# Re-raise errors caught by the controller. | |
5 | +class EnvironmentRoleManagerController; def rescue_action(e) raise e end; end | |
6 | + | |
7 | +class EnvironmentRoleManagerControllerTest < Test::Unit::TestCase | |
8 | + def setup | |
9 | + @controller = EnvironmentRoleManagerController.new | |
10 | + @request = ActionController::TestRequest.new | |
11 | + @response = ActionController::TestResponse.new | |
12 | + end | |
13 | + | |
14 | + # Replace this with your real tests. | |
15 | + def test_truth | |
16 | + assert true | |
17 | + end | |
18 | +end | ... | ... |