我想知道是否有人可以提供帮助。我有一个应用程序的当前设置,只有一个管理员用户应该能够看到用户索引:这很好。此非管理员用户也被重定向到root这也很好(虽然我想将它们重定向到他们的用户配置文件)
真正的问题是,我希望管理员用户能够从索引页面链接访问任何用户的用户个人资料页面,但此刻他只能访问自己的页面。我看到这是因为行动前的correct_user列出了" Syntastic settings
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_enable_signs = 1
let g:syntastic_check_on_wq = 0
我尝试在行动之前向':admin_user'添加:show动作,但似乎没有帮助。任何关于如何解决这个问题的建议将不胜感激。
非常感谢
users_controller.rb
:show
define correct_user
class UsersController < ApplicationController
before_action :logged_in_user, only: [:edit, :update, :show]
before_action :correct_user, only: [:edit, :update, :show]
before_action :admin_user, only: [:index]
定义admin_user
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless current_user?(@user)
end
SESSIONS- sessions_helper.rb
定义current_user
def admin_user
if current_user.admin?
flash.now[:success] = "Admin Access Granted"
else
redirect_to root_path
end
end
答案 0 :(得分:1)
你差不多完成了!只需将其添加到correct_user
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless current_user?(@user) || current_user.admin?
end
您的代码当前重定向到root,除非当前用户是请求用户资源的用户,只需使用unless
扩展User#admin?
语句
此外,要重定向到用户自己的个人资料,请将correct_user
的重定向声明更改为:
def correct_user
@user = User.find(params[:id])
redirect_to user_path(@user) unless current_user?(@user) || current_user.admin?
end
答案 1 :(得分:-1)
如果用户是管理员,最简单的事情就是放在逻辑异常中。我已经对您的路线进行了有根据的猜测并重定向到当前用户个人资料页面而不是root。
def correct_user
@user = User.find(params[:id])
redirect_to(user_path(current_user)) unless (current_user?(@user) && current_user.admin?)
end