Added a confirmation step to the process of granting and revoking user roles.
This commit is contained in:
parent
ab1444f338
commit
30d5e783e4
9 changed files with 54 additions and 92 deletions
|
@ -6,23 +6,35 @@ class UserRolesController < ApplicationController
|
|||
before_filter :require_administrator
|
||||
|
||||
def grant
|
||||
this_user = User.find_by_display_name(params[:display_name], :conditions => {:visible => true})
|
||||
if this_user and UserRole::ALL_ROLES.include? params[:role]
|
||||
this_user.roles.create(:role => params[:role])
|
||||
# added a random nonce here which isn't predictable, making an CSRF procedure much, much more difficult.
|
||||
if params[:nonce] and params[:nonce] == session[:nonce]
|
||||
this_user = User.find_by_display_name(params[:display_name], :conditions => {:visible => true})
|
||||
if this_user and UserRole::ALL_ROLES.include? params[:role]
|
||||
this_user.roles.create(:role => params[:role])
|
||||
redirect_to :controller => 'user', :action => 'view', :display_name => params[:display_name]
|
||||
else
|
||||
flash[:notice] = t('user_role.grant.fail', :role => params[:role], :name => params[:display_name])
|
||||
end
|
||||
else
|
||||
flash[:notice] = t('user_role.grant.fail', :role => params[:role], :name => params[:display_name])
|
||||
@nonce = OAuth::Helper.generate_nonce
|
||||
session[:nonce] = @nonce
|
||||
end
|
||||
redirect_to :controller => 'user', :action => 'view', :display_name => params[:display_name]
|
||||
end
|
||||
|
||||
def revoke
|
||||
this_user = User.find_by_display_name(params[:display_name], :conditions => {:visible => true})
|
||||
if this_user and UserRole::ALL_ROLES.include? params[:role]
|
||||
UserRole.delete_all({:user_id => this_user.id, :role => params[:role]})
|
||||
# added a random nonce here which isn't predictable, making an CSRF procedure much, much more difficult.
|
||||
if params[:nonce] and params[:nonce] == session[:nonce]
|
||||
this_user = User.find_by_display_name(params[:display_name], :conditions => {:visible => true})
|
||||
if this_user and UserRole::ALL_ROLES.include? params[:role]
|
||||
UserRole.delete_all({:user_id => this_user.id, :role => params[:role]})
|
||||
redirect_to :controller => 'user', :action => 'view', :display_name => params[:display_name]
|
||||
else
|
||||
flash[:notice] = t('user_role.revoke.fail', :role => params[:role], :name => params[:display_name])
|
||||
end
|
||||
else
|
||||
flash[:notice] = t('user_role.revoke.fail', :role => params[:role], :name => params[:display_name])
|
||||
@nonce = OAuth::Helper.generate_nonce
|
||||
session[:nonce] = @nonce
|
||||
end
|
||||
redirect_to :controller => 'user', :action => 'view', :display_name => params[:display_name]
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
<h1>Editing user_role</h1>
|
||||
|
||||
<% form_for(@user_role) do |f| %>
|
||||
<%= f.error_messages %>
|
||||
|
||||
<p>
|
||||
<%= f.label :user_id %><br />
|
||||
<%= f.text_field :user_id %>
|
||||
</p>
|
||||
<p>
|
||||
<%= f.label :role %><br />
|
||||
<%= f.text_field :role %>
|
||||
</p>
|
||||
<p>
|
||||
<%= f.submit 'Update' %>
|
||||
</p>
|
||||
<% end %>
|
||||
|
||||
<%= link_to 'Show', @user_role %> |
|
||||
<%= link_to 'Back', user_roles_path %>
|
5
app/views/user_roles/grant.html.erb
Normal file
5
app/views/user_roles/grant.html.erb
Normal file
|
@ -0,0 +1,5 @@
|
|||
<% form_tag request.request_uri do %>
|
||||
<%= hidden_field_tag 'nonce', @nonce %>
|
||||
<p><%= t('user_role.grant.are_you_sure', :name => params[:display_name], :role => params[:role]) %></p>
|
||||
<p><%= submit_tag t'user_role.grant.confirm' %></p>
|
||||
<% end %>
|
|
@ -1,22 +0,0 @@
|
|||
<h1>Listing user_roles</h1>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th>User</th>
|
||||
<th>Role</th>
|
||||
</tr>
|
||||
|
||||
<% @user_roles.each do |user_role| %>
|
||||
<tr>
|
||||
<td><%=h user_role.user_id %></td>
|
||||
<td><%=h user_role.role %></td>
|
||||
<td><%= link_to 'Show', user_role %></td>
|
||||
<td><%= link_to 'Edit', edit_user_role_path(user_role) %></td>
|
||||
<td><%= link_to 'Destroy', user_role, :confirm => 'Are you sure?', :method => :delete %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</table>
|
||||
|
||||
<br />
|
||||
|
||||
<%= link_to 'New user_role', new_user_role_path %>
|
|
@ -1,19 +0,0 @@
|
|||
<h1>New user_role</h1>
|
||||
|
||||
<% form_for(@user_role) do |f| %>
|
||||
<%= f.error_messages %>
|
||||
|
||||
<p>
|
||||
<%= f.label :user_id %><br />
|
||||
<%= f.text_field :user_id %>
|
||||
</p>
|
||||
<p>
|
||||
<%= f.label :role %><br />
|
||||
<%= f.text_field :role %>
|
||||
</p>
|
||||
<p>
|
||||
<%= f.submit 'Create' %>
|
||||
</p>
|
||||
<% end %>
|
||||
|
||||
<%= link_to 'Back', user_roles_path %>
|
5
app/views/user_roles/revoke.html.erb
Normal file
5
app/views/user_roles/revoke.html.erb
Normal file
|
@ -0,0 +1,5 @@
|
|||
<% form_tag request.request_uri do %>
|
||||
<%= hidden_field_tag 'nonce', @nonce %>
|
||||
<p><%= t('user_role.revoke.are_you_sure', :name => params[:display_name], :role => params[:role]) %></p>
|
||||
<p><%= submit_tag t'user_role.revoke.confirm' %></p>
|
||||
<% end %>
|
|
@ -1,13 +0,0 @@
|
|||
<p>
|
||||
<b>User:</b>
|
||||
<%=h @user_role.user_id %>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<b>Role:</b>
|
||||
<%=h @user_role.role %>
|
||||
</p>
|
||||
|
||||
|
||||
<%= link_to 'Edit', edit_user_role_path(@user_role) %> |
|
||||
<%= link_to 'Back', user_roles_path %>
|
Loading…
Add table
Add a link
Reference in a new issue