2015-10-16 45 views
3

同時做管理員工作,我想禁用用戶登錄 - 有沒有辦法使用這個設計 - 我不認爲這個 適合rolify - 因爲這是一個臨時的殘疾 - 在此先感謝您的幫助, 裏克禁用除了管理員在軌道上的紅寶石的所有登錄

+0

嗨裏克,你想保持訪問的管理員,或者你想簡單地禁用每個用戶? – smile2day

+0

保留訪問管理員 - 我注意到投票寶石 - 但必須從命令行運行 - 希望像drupal維護模式的東西。 – user2155272

回答

1

後端

如果你想要創建一個「維護」模式,您最好是這樣做:

#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 

這將防止任何基於控制器的操作被觸發。

最後,如果你想擺脫任何登錄用戶,你需要做一些離奇,像復位會話或類似的東西:

+0

謝謝!我會在星期一嘗試一下 - 我已經在用戶上創建了一個'admin'標誌來表明他們是否擁有管理員權限 - 這一切看起來都不錯。謝謝! – user2155272

+1

這工作 - 我得到了一個循環依賴關係,雖然爲SessionsController user2155272

1

這裏就是我想要做的:

1.爲您的用戶模型的方法。它可能類似於activeable_to_login

2.將此屬性設置爲:boolean

3.使用rails console使用控制檯激活的方法設置爲truefalse,啓用或禁用用戶訪問你的應用程序:

user = User.all 
    user.each do |u| 
    u.active = false # or 
    u.able_to_login = false 
    u.save 
    end 

我不認爲這是最好的方法,但應不安裝其他寶石工作或重碼。

+0

我想保持管理員訪問權限 - 會這樣做嗎? – user2155272

+0

,我可以添加另一個Gem--這是我想添加的功能,而不僅僅是一次性事件。謝謝! – user2155272

+0

這是有幫助的,只是不是我正在尋找..但它給了我的想法。 – user2155272

1

在你/models/user.rb添加此方法

def active_for_authentication? 
    super && is_admin? 
end 

def is_admin? 
    # returns true if user is admin 
end 

這是這樣做的 「制定辦法」 :)

+0

我不知道爲什麼人們建議把這個功能放在用戶對象上。我創建了一個維護對象 - 只能由管理員用戶編輯 - 在記錄檢查維護對象的存在性之前 - 如果存在則不允許。 – user2155272