簡體   English   中英

Ruby on Rails5 / cancancan / devise-對不同類型的用戶實施訪問限制(即,使用戶A與用戶B看到的頁面不同)

[英]Ruby on Rails5/ cancancan/ devise - Implementing access restrictions for different kind of users (i.e. making user A see different pages than user B)

我正在嘗試為我的網站設置某些訪問限制,這意味着我希望管理員看到的頁面與普通用戶不同。 我已經將devise用於用戶身份驗證,並將cancancan用於訪問限制。 不幸的是,我不太確定如何用cancancan實現它。

我通過為用戶分配2個不同的角色(布爾值)來標記用戶-管理員和慈善機構。 基本上,我希望管理員在登錄時登陸頁面A,他也應該有權訪問頁面B和C(以及rails_admin)。 慈善用戶應該進入頁面D,並且應該有權訪問頁面E和F。

我嘗試將以下代碼添加到app / model / ability.rb中,但不幸的是沒有運氣:

user ||= User.new # guest user (not logged in)
if user.admin_role?
  can :manage, :page A
  can :manage, :page B
  can :manage, :page C
  can :access, :rails_admin       # only allow admin users to access Rails Admin
end
if user.charity_role?
  can :manage, page D
  can :manage, page E
  can :manage, page F
end

有人知道我應該改變什么嗎? 另外,如何確保登錄后管理員進入A頁,慈善機構進入D頁?

我將不勝感激!

您可以在Rails視圖或Rails控制器中最好地控制網頁的顯示。 因此,例如在帶有ERB的視圖中,您可以使用以下方法控制鏈接的顯示,以編輯Article對象:

<% if can? :update, @article %>
  <%= link_to "Edit", edit_article_path(@article) %>
<% end %>

這將假定您在app/models/ability.rb具有以下內容:

can :update, Article       # user can update Articles

或者,如果您想顯示一個完全不同的View模板? 然后在控制器中執行此操作。 粗略(未經測試)的代碼段,可能在“ show”的articles_controller.rb操作中:

if can? :read, @article 
   template = 'articles/show'
else
   template = 'articles/not_allowed'
end
respond_to do |format|
  format.html { render :template => template }
  format.js { render :template => template }
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM