我是比較新的軌道(編碼),我的理解是不是這個100%,我試圖讀出需要強有力的PARAMS文件,並且是無法解決問題的。這是一個不安全的方式使用強大的params導軌嗎?
我創建使用權威人士對網站用戶和管理員。我創建了一個只有管理員才能訪問的儀表板,它提供了所有用戶的概述,刪除它們的方法以及更改角色的方法。據我所知,這使用user_params中傳遞的users_controller更新方法。
用戶更新的方法也,從我個人理解,用於用戶編輯自己的個人資料(變更電子郵件等),我擔心,我添加了一個方式,爲他們傳遞一個角色的轉變以某種方式通過表單。
這是去了解這個正確的方式?或者我應該爲角色更改創建一組新的參數,這些參數僅在用戶儀表板頁面上使用 - 如果是這樣,我將如何執行此操作?
我覺得我缺少一個,或在這裏的幾件事情。
user_controller.rb: 類UsersController < ApplicationController的
before_filter :authenticate_user!
after_action :verify_authorized
before_action :set_user, only: [:edit, :update, :show, :destroy]
def update
if @user.update(user_params)
authorize @user
flash[:success] = "Profile updated successfully!"
redirect_to @user
else
render 'edit'
end
end
def create
@user = User.new(user_params)
if @user.save
session[:user_id] = @user.id
cookies.signed[:user_id] = @user.id
flash[:success] = "Welcome #{@user.username} to Day One"
redirect_to user_path(@user)
else
render 'new'
end
end
def show
authorize @user
end
def destroy
authorize @user
@user.destroy
flash[:danger] = "User and all their related goals have been deleted"
redirect_to users_path
end
def user_dashboard
@users = User.all
authorize User
end
private
def user_params
params.require(:user).permit(:username, :email, :password, :password_confirmation, :profileimage, :role)
end
def set_user
@user = User.find(params[:id])
end
end
儀表盤頁:
<% @users.each do |user| %>
<tr>
<td>
<%= link_to user.email, user %>
</td>
<td>
<%= form_for(user) do |f| %>
<%= f.select(:role, User.roles.keys.map {|role| [role.titleize,role]}) %>
<td>
<button><%= f.submit 'Change Role' %></button>
</td>
<% end %>
終於user_policy.rb:
class UserPolicy < ApplicationPolicy
attr_reader :current_user, :model
def initialize(current_user, model)
@current_user = current_user
@user = model
end
def index?
@current_user.admin?
end
def show?
# scope.where(:id => record.id).exists?
end
def create?
false
end
def new?
create?
end
def update?
@current_user.admin? || @current_user == @user
end
def edit?
@current_user.admin? || @current_user == @user
end
def destroy?
@current_user.admin?
end
def user_dashboard?
@current_user.admin?
end
end
爲什麼你授權用戶__after__你做了更新? –