如果满足条件 X,允许登录用户仅访问某个控制器#action 的最佳方法是什么?
- 例如,用户已停用他的帐户( user.is_deleted == true )
- 如果用户登录我想将他重定向到 /reactivate
- 如果用户尝试了任何其他 URL,例如 /profiles /search 它应该重定向到 /reactivate
我已经在 applicationcontroller 中尝试了 before_filters,但登录和注销方法除外,但它们无法正常工作,与其他操作混淆,所以我真的在寻找一种干净的方法来做到这一点,有人建议吗?
目前我正在使用
def after_sign_in_path_for(resource)
@user = User.where(:id => current_user.id).first
if @user.is_deleted == true
"/reactivate"
end
结尾
但是 *这仅适用于用户登录* 之后他们可以做类似 /home /search 等的事情所以我想“锁定”应用程序。我曾想过,也许需要使用 can can 之类的东西来代替自定义代码。
你知道一个工作可维护的干净的方法来做到这一点吗?
编辑:
做了这样的事情(你看到凌乱和休息)
def welcome_redirect
if user_signed_in?
if not current_user.welcome == 0
if not params[:controller] == "home" && params[:action] == "welcome"
if not params[:controller] == "modal"
if not params[:controller] == "profiles"
redirect_to profiles_path
end
end
end
end
end
end
编辑2:
这似乎有效:
def ensure_account_not_deleted
if user_signed_in?
@user = User.where(:id => current_user.id).first
if params[:controller] != "users" && params[:action] != "reactivate" && @user.is_deleted == true
redirect_to '/reactivate'
end
end
end
- 另一个之前的过滤器弄乱了一些值,导致我刚刚发现它不起作用!感谢所有导致此解决方案的建议*