如果满足条件X,允许登录用户只访问某个控制器#动作的最佳方法是什么?
我在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等一样做 所以我想"锁定"该应用程序。我想也许不是自定义代码,而是需要用类似的东西来做这个。
你知道一种可行的清洁方法吗?
编辑:
做过这样的事情(你看到凌乱和休息)
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
答案 0 :(得分:1)
出了什么问题:
#Application Controller
before_filter :ensure_account_not_deleted
def ensure_account_not_deleted
if params[:controller] != "users" && parmas[:action] != "reactivate" && @user.is_deleted == true
redirect_to '/reactivate'
end
end
修改强>
我编写了代码,一次又一次地重定向重定向重新激活。
我在这里假设了两件事:
处理重新激活的控制器是UsersController。
该操作称为“重新激活”
答案 1 :(得分:0)
我也有类似的检查,如果用户帐户被停用,那么他就无法访问该应用程序。我做了
class SessionsController < Devise::SessionsController
....
def create
resource = build_resource
#to check if user is active or the organisation he belongs to is active
if current_user and current_user.organisation and (!current_user.is_active or !current_user.organisation.is_active)
sign_out current_user
flash[:notice] = "Account deactivated. Contact Admin."
redirect_to root_path and return
end
super
end
....
end
并添加了
before_filter :authenticate_user!
到所有控制器
答案 2 :(得分:0)
我将'root_path作为root:to =&gt; “会话#新的””。在我的应用程序中,每个用户(超级管理员除外)都属于某个组织。超级管理员可以激活/停用用户/组织。如果用户被停用,那么他就不应该登录了。如果组织已停用,则不应允许属于该组织的用户登录。我已经覆盖了Session控制器,因为 1)使用ip地址n时间维护用户登录/注销时间以进行报告。 2)禁止不属于公司的用户登录。 3)检查用户是否处于活动状态或他所属的组织是否处于活动状态