Commit 46cf13bf0a994daa8a353067422d4a1077d2afa5

Authored by MoisesMachado
1 parent 6a007a4b

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
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 &lt; 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 &lt; 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/helpers/environment_role_manager_helper.rb 0 → 100644
... ... @@ -0,0 +1,2 @@
  1 +module EnvironmentRoleManagerHelper
  2 +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 &lt; 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|
... ...
app/views/environment_role_manager/affiliate.rhtml 0 → 100644
... ... @@ -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' %>
... ...
app/views/environment_role_manager/change_role.rhtml 0 → 100644
... ... @@ -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 %>
... ...
app/views/environment_role_manager/index.rhtml 0 → 100644
... ... @@ -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' %>
... ...
app/views/environment_role_manager/make_admin.rhtml 0 → 100644
... ... @@ -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
... ... @@ -71,7 +71,7 @@
71 71 <%= @category.full_name %>
72 72 <% else @category %>
73 73 <div id='user_options'>
74   - <%= user_options %>
  74 + <%= user_options.join(' ') %>
75 75 </div><!-- id='user_options' -->
76 76 <% end %>
77 77 </div>
... ...
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
... ... @@ -358,3 +358,6 @@ li#category4 ul li a:hover {
358 358 color: black;
359 359 }
360 360  
  361 +div#user_options *{
  362 + color: white;
  363 +}
... ...
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
... ...