2017-07-17 57 views
0

我想要3個用戶級別作爲Admin,Manager,Customer在我的Rails應用程序中。 所以我創建了3個設計模型作爲管理員,經理和客戶。 而在我的應用程序中,有產品,交付和服務的模型和控制器。 我想爲每個模型設置訪問級別。如何限制對rails中不同用戶角色(cancan gem)的模型訪問?

因此管理員可以訪問所有模型,控制器

經理都可以訪問到產品,交貨

客戶有機會獲得服務

我怎麼能寫的能力模型來適應這些要求 我已經寫成如下。不知道這是否正確。

class Ability 
    include CanCan::Ability 
    def initialize(user) 
     # Define abilities for the passed in user here. For example: 
     # 
      user ||= User.new # guest user (not logged in) 
      if user.admin? 
      can :manage, :all 
      elsif user.manager? 
      can :manage, product ,delivery 
      elsif user.customer? 
      can :manage, services 
      end 
    end 

並請幫我寫模型的代碼來限制不同的用戶角色訪問。 請幫助我!

回答

0

我認爲最簡單的方法來解決這個問題將在你的控制器。讓我們說你有一個帶控制器的書籍模型,只想讓管理員訪問這個部分。這也可能是最好的,以創建一個在您預訂控制器的方法,以及使用前操作方法稱之爲:

class BookingsController < ApplicationController 
    before_action :check_admin 

    def check_admin 
    return unless admin_signed_in? 
    redirect_to root_path, error: 'You are not allowed to access this part of the site' 
    end 
end 

這將執行check_admin方法,每次有什麼事情發生在訂票控制器,並重定向到你的根路徑除非管理員登錄。Devise還附帶user_signed_in?和manager_signed_in?助手,如果你已經創建了這些名稱的模型。

你可以決定哪個控制器動作將執行的操作調整這個更大,例如

before_action :check_admin, only: [:edit, :create, :delete, :update, :new] 

僅承擔這些控制器動作前的檢查,並允許任何人訪問索引和顯示操作。

+0

非常感謝你......這是非常有幫助:) –

相關問題