2017-09-04 21 views
0

我有安裝設計,並建議在http://codepany.com/blog/rails-5-user-accounts-with-3-types-of-roles-devise-rails_admin-cancancan/我已添加超級用戶和主管角色。現在我只想讓超級用戶訪問很多視圖(對配置數據進行CRUD)。rails設計用戶管理,我必須在所有vews個人上執行它

我知道我可以通過在內容周圍包裹來做到這一點。

<% if current_user.superadmin_role? %> 
    ...all the content... 
<% else %> 
    This page is not available to you 
<% end %> 

從我收集的內容中我需要爲所有視圖執行此操作,以限制所有視圖。但是想知道是否有更好的方法來做到這一點。即我可以做一些事情,比如把所有的支票放在一個地方,只允許某些網頁通過,甚至不允許所有的網頁,並且我可以把一些代碼放在公共的地方。

回答

0

如果您不希望顯示的內容是整個頁面,您可以通過在控制器中加入 before_action :authenticate_admin! 做到這一點。

#some_controller.rb 
before_action :authenticate_admin! 

def action 
    ... 
end 

private 
def authenticate_admin 
    unless current_user.superadmin_role? 
    redirect_to "403.html" 
    end 
end 

或者,如果你想這樣做非控制水平,

#view 
<div class="hide <%= 'admin' if @is_admin %>"> 
    hogehoge 
</div> 

#controller 
before_action set_is_admin 
def set_is_admin 
    @is_admin = current_user.superadmin_role? ? true : false 
end 

再加入

# application.css 
<style> 
.hide{ 
    display: none; 
} 
.admin{ 
    display: block; 
} 
</style> 
+0

謝謝,工作原理,但我得到,如果一個「損壞的內容錯誤」用戶不在superadmin_role中。我猜它是'redirect_to「403.html」'。我將'403.html'更改爲'/',現在它將用戶發送回主頁。我也必須改變':authenticate_admin!'到':authenticate_admin'來讓它工作。 –

相關問題