2013-03-16 107 views
0

不存在的寶石,那下面的事情工具:Rails的基於角色的身份驗證與存儲在數據庫角色

  • 用戶可以有多種角色
  • 每個角色都有權限
  • 每個權限只是布爾
  • 角色和權限存儲在數據庫中(最重要的)

例如,我想這樣的事情:

if current_user.can?(:read_all, :list_of_orders) 
... 
end 

can?方法應該搜索,是否有任何角色允許它。

+0

我對cancan很瞭解,但是它在文件中定義了角色,並且我無法在應用程序運行時添加一些新角色。 – Drakmail 2013-03-16 19:13:23

+0

經過一番沉思之後,我希望使用設計模式字段中存儲的cancan和序列化角色數組。只是因爲不需要角色權限的運行時管理:) – Drakmail 2013-03-16 20:20:11

回答

1

定義能力繼Zippie的問題,我建議你去黃燦燦的,但你也可以用它一起進行身份驗證。看到以下鏈接,你會發現有用的Rails 3 Authentication and Authorization with Devise and CanCan (Part 1) & Rails 3 Authentication and Authorization with Devise and CanCan (Part 2)

你可能有這樣的事情在你的ability.rb

class Ability 
    include CanCan::Ability 
    def initialize(user) 
    user ||= User.new # guest user 
    # raise user.role?(:administrator).inspect 
    if user.role? :administrator 

     can :manage, :all 
     can :manage, User 

    elsif user.role? :employee 
     can :read, :all 

    end 

    end 
end 

所以,在你的意見,你可以這樣做

您也可以使用can?在你的控制器創建您必要的過濾器。

1

見制訂用戶認證,你可以在那裏定義你的角色:

https://github.com/plataformatec/devise 

,甚至更好,用康康舞輕鬆地結合起來:

https://github.com/ryanb/cancan/wiki/Role-Based-Authorization 
1

你可以試試康康舞的寶石,它功能強大

https://github.com/ryanb/cancan

例如:

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

你可以在一個ability.rb

can :manage, Article # user can perform any action on the article 
can :read, :all  # user can read any object 
can :manage, :all  # user can perform any action on any object 
+0

是的,cancan是一個很好的解決方案,但我需要dynamic(在運行時)管理角色。 – Drakmail 2013-03-16 19:10:00

相關問題