在进行管理工作时,我想禁用用户登录 - 是否有一些方法可以使用设计 - 我没有想到这一点 适合rolify - 因为这是暂时的残疾 - 在此先感谢任何帮助, 瑞克
答案 0 :(得分:1)
这就是我要做的事情:
<强> 1。为您的用户模型创建方法。可能类似于active
或able_to_login
。
<强> 2。将此属性设置为:boolean
。
第3。使用rails console
。使用控制台将有效方法设置为true
或false
,启用或禁用用户访问您的应用:
user = User.all
user.each do |u|
u.active = false # or
u.able_to_login = false
u.save
end
我不认为这是最好的方法,但它应该可以在不安装其他gem或重码的情况下工作。
答案 1 :(得分:1)
在/models/user.rb中添加此方法
def active_for_authentication?
super && is_admin?
end
def is_admin?
# returns true if user is admin
end
这是做到这一点的“设计方式”:)
答案 2 :(得分:1)
返回-完强>
如果你想创建一个“维护”模式,你最好做这样的事情:
#app/models/user.rb
class User < ActiveRecord::Base
end
#app/models/admin.rb
class Admin < User
def maintainance!
self.toggle! :maintainance
end
end
这需要maintenance
表格中的users
列,您还必须在type
表格中添加users
列。
您可以将此保留在User
模型中,但是,您需要一些条件来确定用户是否为管理员。既然你没有具体说明你的差异化,那么我们就是这样做的。
-
你可以这样称呼它:
#app/controllers/users_controller.rb
class SettingsController < ApplicationController
before_action :authenticate_user!
def maintenance
current_user.maintenance! #-> toggles so you'll just be able to call this as you need.
end
end
#config/routes.rb
resources :settings, only: [] do
put :maintenance #-> url.com/settings/maintenance (considering current_user present)
end
这样,您就可以通过user
设置区域设置<维护“模式。如果您没有,您将能够使用上述代码使其正常工作。
<强>前端强>
随着后端的到位,您将能够管理前端。
为此,您需要帮助程序来确定是否有任何用户设置了“维护”模式......
#app/helpers/application_helper.rb
class ApplicationHelper
def maintenance_mode?
Admin.exists? maintenance: true
end
end
这将允许您使用此帮助程序来确定是否应允许Devise
接受登录:
#app/views/devise/sessions/new.html.erb
<% unless maintenance_mode? %>
... devise form ...
<% end %>
帮助程序将执行数据库请求,但将其保留在devise
区域仅(IE不是“站点范围”)应该可以正常运行。
#app/controllers/devise/sessions_controller.rb
class SessionsController < Devise::SessionsController
before_action :check_maintenance
private
def check_maintenance
redirect_to root_path, notice: "Sorry, maintenance mode is in effect; no logins." if maintenance_mode?
end
end
这将阻止任何基于控制器的操作被触发。
最后,如果您想要删除任何已登录的用户,您需要做一些古怪的事情,例如重置会话或类似内容: