@@ -19,8 +19,8 class UsersController < ApplicationController | |||||
19 | layout 'admin' |
|
19 | layout 'admin' | |
20 |
|
20 | |||
21 | before_filter :require_admin, :except => :show |
|
21 | before_filter :require_admin, :except => :show | |
22 | before_filter :find_user, :only => [:show, :edit, :update, :edit_membership, :destroy_membership] |
|
22 | before_filter :find_user, :only => [:show, :edit, :update, :destroy, :edit_membership, :destroy_membership] | |
23 | accept_key_auth :index, :show, :create, :update |
|
23 | accept_key_auth :index, :show, :create, :update, :destroy | |
24 |
|
24 | |||
25 | helper :sort |
|
25 | helper :sort | |
26 | include SortHelper |
|
26 | include SortHelper | |
@@ -177,6 +177,15 class UsersController < ApplicationController | |||||
177 | redirect_to :controller => 'users', :action => 'edit', :id => @user |
|
177 | redirect_to :controller => 'users', :action => 'edit', :id => @user | |
178 | end |
|
178 | end | |
179 |
|
179 | |||
|
180 | verify :method => :delete, :only => :destroy, :render => {:nothing => true, :status => :method_not_allowed } | |||
|
181 | def destroy | |||
|
182 | @user.destroy | |||
|
183 | respond_to do |format| | |||
|
184 | format.html { redirect_to(users_url) } | |||
|
185 | format.api { head :ok } | |||
|
186 | end | |||
|
187 | end | |||
|
188 | ||||
180 | def edit_membership |
|
189 | def edit_membership | |
181 | @membership = Member.edit_membership(params[:membership_id], params[:membership], @user) |
|
190 | @membership = Member.edit_membership(params[:membership_id], params[:membership], @user) | |
182 | @membership.save if request.post? |
|
191 | @membership.save if request.post? |
@@ -1,6 +1,7 | |||||
1 | <div class="contextual"> |
|
1 | <div class="contextual"> | |
2 | <%= link_to l(:label_profile), user_path(@user), :class => 'icon icon-user' %> |
|
2 | <%= link_to l(:label_profile), user_path(@user), :class => 'icon icon-user' %> | |
3 | <%= change_status_link(@user) %> |
|
3 | <%= change_status_link(@user) %> | |
|
4 | <%= link_to(l(:button_delete), @user, :confirm => l(:text_are_you_sure), :method => :delete, :class => 'icon icon-del') if User.current != @user %> | |||
4 | </div> |
|
5 | </div> | |
5 |
|
6 | |||
6 | <h2><%= link_to l(:label_user_plural), :controller => 'users', :action => 'index' %> » <%=h @user.login %></h2> |
|
7 | <h2><%= link_to l(:label_user_plural), :controller => 'users', :action => 'index' %> » <%=h @user.login %></h2> |
@@ -37,7 +37,10 | |||||
37 | <td align="center"><%= checked_image user.admin? %></td> |
|
37 | <td align="center"><%= checked_image user.admin? %></td> | |
38 | <td class="created_on" align="center"><%= format_time(user.created_on) %></td> |
|
38 | <td class="created_on" align="center"><%= format_time(user.created_on) %></td> | |
39 | <td class="last_login_on" align="center"><%= format_time(user.last_login_on) unless user.last_login_on.nil? %></td> |
|
39 | <td class="last_login_on" align="center"><%= format_time(user.last_login_on) unless user.last_login_on.nil? %></td> | |
40 | <td><small><%= change_status_link(user) %></small></td> |
|
40 | <td class="buttons"> | |
|
41 | <%= change_status_link(user) %> | |||
|
42 | <%= link_to(l(:button_delete), user, :confirm => l(:text_are_you_sure), :method => :delete, :class => 'icon icon-del') unless User.current == user %> | |||
|
43 | </td> | |||
41 | </tr> |
|
44 | </tr> | |
42 | <% end -%> |
|
45 | <% end -%> | |
43 | </tbody> |
|
46 | </tbody> |
@@ -122,8 +122,7 ActionController::Routing::Routes.draw do |map| | |||||
122 | map.resources :users, :member => { |
|
122 | map.resources :users, :member => { | |
123 | :edit_membership => :post, |
|
123 | :edit_membership => :post, | |
124 | :destroy_membership => :post |
|
124 | :destroy_membership => :post | |
125 |
} |
|
125 | } | |
126 | :except => [:destroy] |
|
|||
127 |
|
126 | |||
128 | # For nice "roadmap" in the url for the index action |
|
127 | # For nice "roadmap" in the url for the index action | |
129 | map.connect 'projects/:project_id/roadmap', :controller => 'versions', :action => 'index' |
|
128 | map.connect 'projects/:project_id/roadmap', :controller => 'versions', :action => 'index' |
@@ -264,6 +264,30 class UsersControllerTest < ActionController::TestCase | |||||
264 | assert u.check_password?('newpass') |
|
264 | assert u.check_password?('newpass') | |
265 | end |
|
265 | end | |
266 |
|
266 | |||
|
267 | def test_destroy | |||
|
268 | assert_difference 'User.count', -1 do | |||
|
269 | delete :destroy, :id => 2 | |||
|
270 | end | |||
|
271 | assert_redirected_to '/users' | |||
|
272 | assert_nil User.find_by_id(2) | |||
|
273 | end | |||
|
274 | ||||
|
275 | def test_destroy_should_not_accept_get_requests | |||
|
276 | assert_no_difference 'User.count' do | |||
|
277 | get :destroy, :id => 2 | |||
|
278 | end | |||
|
279 | assert_response 405 | |||
|
280 | end | |||
|
281 | ||||
|
282 | def test_destroy_should_be_denied_for_non_admin_users | |||
|
283 | @request.session[:user_id] = 3 | |||
|
284 | ||||
|
285 | assert_no_difference 'User.count' do | |||
|
286 | get :destroy, :id => 2 | |||
|
287 | end | |||
|
288 | assert_response 403 | |||
|
289 | end | |||
|
290 | ||||
267 | def test_edit_membership |
|
291 | def test_edit_membership | |
268 | post :edit_membership, :id => 2, :membership_id => 1, |
|
292 | post :edit_membership, :id => 2, :membership_id => 1, | |
269 | :membership => { :role_ids => [2]} |
|
293 | :membership => { :role_ids => [2]} |
@@ -245,26 +245,36 class ApiTest::UsersTest < ActionController::IntegrationTest | |||||
245 | end |
|
245 | end | |
246 | end |
|
246 | end | |
247 | end |
|
247 | end | |
|
248 | end | |||
248 |
|
249 | |||
249 |
|
|
250 | context "DELETE /users/2" do | |
250 |
|
|
251 | context ".xml" do | |
251 | should "not be allowed" do |
|
252 | should_allow_api_authentication(:delete, | |
252 | assert_no_difference('User.count') do |
|
253 | '/users/2.xml', | |
253 | delete '/users/2.xml' |
|
254 | {}, | |
254 | end |
|
255 | {:success_code => :ok}) | |
255 |
|
|
256 | ||
256 | assert_response :method_not_allowed |
|
257 | should "delete user" do | |
|
258 | assert_difference('User.count', -1) do | |||
|
259 | delete '/users/2.xml', {}, :authorization => credentials('admin') | |||
257 | end |
|
260 | end | |
|
261 | ||||
|
262 | assert_response :ok | |||
258 | end |
|
263 | end | |
259 |
|
|
264 | end | |
260 | context ".json" do |
|
265 | ||
261 | should "not be allowed" do |
|
266 | context ".json" do | |
262 | assert_no_difference('User.count') do |
|
267 | should_allow_api_authentication(:delete, | |
263 |
|
|
268 | '/users/2.xml', | |
264 |
|
|
269 | {}, | |
|
270 | {:success_code => :ok}) | |||
265 |
|
271 | |||
266 | assert_response :method_not_allowed |
|
272 | should "delete user" do | |
|
273 | assert_difference('User.count', -1) do | |||
|
274 | delete '/users/2.json', {}, :authorization => credentials('admin') | |||
267 | end |
|
275 | end | |
|
276 | ||||
|
277 | assert_response :ok | |||
268 | end |
|
278 | end | |
269 | end |
|
279 | end | |
270 | end |
|
280 | end |
@@ -302,6 +302,9 class RoutingTest < ActionController::IntegrationTest | |||||
302 |
|
302 | |||
303 | should_route :put, "/users/444", :controller => 'users', :action => 'update', :id => '444' |
|
303 | should_route :put, "/users/444", :controller => 'users', :action => 'update', :id => '444' | |
304 | should_route :put, "/users/444.xml", :controller => 'users', :action => 'update', :id => '444', :format => 'xml' |
|
304 | should_route :put, "/users/444.xml", :controller => 'users', :action => 'update', :id => '444', :format => 'xml' | |
|
305 | ||||
|
306 | should_route :delete, "/users/44", :controller => 'users', :action => 'destroy', :id => '44' | |||
|
307 | should_route :delete, "/users/44.xml", :controller => 'users', :action => 'destroy', :id => '44', :format => 'xml' | |||
305 | end |
|
308 | end | |
306 |
|
309 | |||
307 | # TODO: should they all be scoped under /projects/:project_id ? |
|
310 | # TODO: should they all be scoped under /projects/:project_id ? |
General Comments 0
You need to be logged in to leave comments.
Login now