同时做管理员工作,我想禁用用户登录 - 有没有办法使用这个设计 - 我不认为这个 适合rolify - 因为这是一个临时的残疾 - 在此先感谢您的帮助, 里克禁用除了管理员在轨道上的红宝石的所有登录
回答
后端
如果你想要创建一个“维护”模式,您最好是这样做:
#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
列,并且您还必须在users
表中添加type
列。
您可以在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
这将防止任何基于控制器的操作被触发。
最后,如果你想摆脱任何登录用户,你需要做一些离奇,像复位会话或类似的东西:
谢谢!我会在星期一尝试一下 - 我已经在用户上创建了一个'admin'标志来表明他们是否拥有管理员权限 - 这一切看起来都不错。谢谢! – user2155272
这工作 - 我得到了一个循环依赖关系,虽然为SessionsController
这里就是我想要做的:
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
我不认为这是最好的方法,但应不安装其他宝石工作或重码。
我想保持管理员访问权限 - 会这样做吗? – user2155272
,我可以添加另一个Gem--这是我想添加的功能,而不仅仅是一次性事件。谢谢! – user2155272
这是有帮助的,只是不是我正在寻找..但它给了我的想法。 – user2155272
在你/models/user.rb添加此方法
def active_for_authentication?
super && is_admin?
end
def is_admin?
# returns true if user is admin
end
这是这样做的 “制定办法” :)
我不知道为什么人们建议把这个功能放在用户对象上。我创建了一个维护对象 - 只能由管理员用户编辑 - 在记录检查维护对象的存在性之前 - 如果存在则不允许。 – user2155272
- 1. 由管理员在轨道上的红宝石管理用户
- 2. 如何管理用户在轨道上的红宝石管理员
- 3. 红宝石在轨道上的宝石
- 4. 轨道上的红宝石(amistad宝石)
- 5. 除了在轨道上使用红宝石的HTML
- 6. Facebook登录红宝石在铁轨上
- 7. 在轨道上的红宝石rhotoalbum
- 8. 在轨道上的红宝石jquery
- 9. str_to_date在轨道上的红宝石?
- 10. 在轨道上的红宝石链接
- 11. Suburl在轨道上的红宝石
- 12. 在轨道上的红宝石Jquery Tablesorter
- 13. 在轨道上用红宝石开始
- 14. 协会红宝石在轨道上的所有模型
- 15. 我将如何destroy_all或delete_all记录除了在轨道上的红宝石?
- 16. 轨道上的红宝石不能手动删除记录?
- 17. 有效的记录红宝石轨道上的错误
- 18. 轨道上的红宝石3.1移动.swf到资产管道?
- 19. 禁用轨道上的红宝石作业进行测试
- 20. 轨道上的红宝石I18环
- 21. 轨道上的红宝石has_many验证
- 22. 轨道上的回形针红宝石
- 23. 轨道上的红宝石URL验证
- 24. 轨道上的红宝石check_box
- 25. 轨道上的红宝石1.2.6和ActiveMerchant
- 26. 轨道上的红宝石ActionMailer错误
- 27. cakephp或轨道上的红宝石
- 28. 轨道上红宝石的关联
- 29. 干轨道上的红宝石环
- 30. redirect_to问题 - 轨道上的红宝石
嗨里克,你想保持访问的管理员,或者你想简单地禁用每个用户? – smile2day
保留访问管理员 - 我注意到投票宝石 - 但必须从命令行运行 - 希望像drupal维护模式的东西。 – user2155272