我正在编写应用程序并使用Rails Tutorial中的授权/身份验证方法作为我的基础。我希望管理员用户能够更改其他用户的管理状态,同时防止非管理员用户执行相同操作。以下解决方案是否可以安全实施?有更优雅的解决方案吗?
控制器:
class UsersController < ApplicationController
...
def user_params
if current_user.admin?
params.require(:user).permit(:name, :email, :password,
:password_confirmation, :admin)
else
params.require(:user).permit(:name, :email, :password,
:password_confirmation)
end
end
end
助手:
module SessionsHelper
def current_user=(user)
@current_user = user
end
def current_user
remember_token = User.digest(cookies[:remember_token])
@current_user ||= User.find_by(remember_token: remember_token)
end
end
答案 0 :(得分:0)
我建议使用 pundit
之类的内容class UserPolicy < ApplicationPolicy
def permitted_attributes
attrs = [ :name, :email, :password, :password_confirmation ]
attrs << :admin if user.admin?
attrs
end
end
class UsersController < ApplicationController
# ...
private
def user_params
params.require(:user).permit(*policy(@user || User).permitted_attributes)
end
end