1

我正在使用已經使用declarative_authorization來處理用戶權限的Rails 2.3應用程序。每個用戶都屬於一個組(沒有花哨的角色),對某些模型擁有權限,主要是常規的CRUD操作,但有一些特殊的操作。這一切都可以正常工作,在通常的開箱模式下使用declarative_authorization。Rails可配置授權每角色/ crud行動

我們現在想允許管理員針對模型類型設置特定用戶組的權限。例如,我們創建一個新的組Foo,將一些用戶分配給它,然後使用複選框決定組Foo中的用戶是否可以使用模型Bar的c/r/u/d對象。

我以前用過acl9,我想我明白我該如何做這件事。我最近一直是CanCan的粉絲,但我不要看看它如何輕鬆。如果declarative_authorization可以做到這一點,我會堅持下去,但我準備咬牙切齒。

什麼插件將是實現這一目標的最佳方法?有沒有辦法讓declarative_authorization來完成這項工作?一個使用CanCan的優雅方法?是否有任何我應該注意的問題,例如數據庫性能?

我可以確信將應用升級到Rails 3.1,但我更喜歡找到兼容2.3的解決方案。

我已經看到了一些類似的問題,但沒有令人滿意的答案 Rails Dynamic Role-Based Authorization plugin?

而這一點,對於康康舞 https://github.com/ryanb/cancan/wiki/Role-Based-Authorization

回答

0

我是StoneWall寶石的粉絲 - 授權檢查是形式一個Ruby塊,所以在這個塊中你可以查找記錄並查看相關用戶是否有授權。

這裏沒有很多文檔,但這個想法是:

a_user_object.may_read?(object) 

如果object是一個TODO實例,那麼石牆看起來INT待辦模型和執行read

# app/models/todo.rb 

stonewall do |s| 

    s.action :read do |todo, user| 
     todo.owner == user # only the owner of a todo item may read the item 
    end 
end 

這種方法使兩件事容易:

  1. read只是一個Ruby塊,所以無論你想要發生什麼都可以發生
  2. 可以給動作賦予任意名稱,所以如果你想檢查一下用戶是否有權評論一個todo項目(例如),只需創建一個s.action :comment並訪問它與a_user_object.may_comment?(object)