用戶有權管理特定位置和類別組合的文章。聲明授權與特許加入表
例如Dave可能被允許管理巴黎的HR文章。保羅可能被允許管理倫敦的商業文章。是
的模型及其協會如下:
- 用戶有很多權限
- 權限屬於用戶,位置和類別
- 類別有許多文章和權限
- 位置都有很多文章和權限
- 文章屬於位置和類別
我可以說:
has_permission_on :articles, :to => :manage do
if_attribute :location => { :permissions => { :user_id => is {user.id} }, :category => { :permissions => { :user_id => is {user.id} } }
end
當我打電話permitted_to?(:刪除)上的一篇文章記錄(其類別ID是1893年和位置ID是2939),下面的查詢運行:
SELECT `categories`.* FROM `categories` WHERE `categories`.`id` = 1893 LIMIT 1
SELECT `permissions`.* FROM `permissions` WHERE (`permissions`.category_id = 1893)
SELECT `locations`.* FROM `locations` WHERE `locations`.`id` = 2939 LIMIT 1
SELECT `permissions`.* FROM `permissions` WHERE (`permissions`.location_id = 2939)
我需要運行,真的是:
SELECT `permissions`.* FROM `permissions` WHERE (`permissions`.category_id = 1893 AND `permissions`.location_id = 2939)
有什麼辦法來實現這一目標?
在此先感謝。
更新
好了,我現在在文章模型的實例方法:
def permitted_user_ids
Permission.select('user_id').where(:location_id => location_id, :category_id => category_id).map(&:user_id)
end
,現在我的原則是:
has_permission_on :articles, :to => :manage do
if_attribute :permitted_user_ids => contains { user.id }
end
現在,當我在文章記錄中呼叫allowed_to?(:delete)(或讀取/更新/創建/管理)wh類別id是1893和位置id是2939,下面的查詢運行:
SELECT user_id FROM `permissions` WHERE `permissions`.`category_id` = 1893 AND `permissions`.`location_id` = 2939
......這正是我想要的。
除了,with_permissions_to作用域行爲非常奇怪。
Article.with_permissions_to(:read)
現在產生:
SELECT `articles`.* FROM `articles` WHERE (`articles`.`id` = 9473)
...其中9473是當前用戶的ID!
我很困惑。
你是對的 - 權限屬於用戶,位置和類別,而用戶,位置和類別各自擁有許多權限 - 我已更正問題。乾杯。 – marc