gpt4 book ai didi

ruby-on-rails - 在 ruby​​ on rails 中禁用除 admin 之外的所有登录

转载 作者:行者123 更新时间:2023-12-04 06:14:54 24 4
gpt4 key购买 nike

在做管理工作时,我想禁用用户登录 --有什么方法可以为此使用设计 - 我不认为这个适用于 rolify -- 因为这是一个临时禁用 --在此先感谢您的帮助, rake

最佳答案

后端

如果你想创建一个“维护”模式,你最好这样做:

#app/models/user.rb
class User < ActiveRecord::Base
end

#app/models/admin.rb
class Admin < User
def maintainance!
self.toggle! :maintainance
end
end

这将需要在 users 表中添加一个 maintenance 列,并且您必须在 中添加一个 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

这将允许您通过用户 设置区域设置“维护”模式。如果您没有,您将能够使用上面的代码让它工作。


前端

有了后端,您就可以管理前端了。

为此,您需要一个助手来确定是否有任何用户设置了“维护”模式...

#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 区域(即它不是“站点范围”)应该没问题。

#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

这将阻止触发任何基于 Controller 的操作。

最后,如果您想摆脱任何登录的用户,您需要做一些古怪的事情,比如重置 session 或类似的事情:

关于ruby-on-rails - 在 ruby​​ on rails 中禁用除 admin 之外的所有登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33176257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com