我想CanCan可以處理你想要的東西。既然你沒有提供關於用戶授權的細節,我會告訴你一些我認爲會有幫助的方法。我要說的第一件事就是你可以將任何你想要的對象傳遞給你的能力文件。要做到這一點,你就以下事項:
def ApplicationController < ActionController::Base
def current_ability
@current_ability = CustomAbility.new(pass, in, anything, here)
end
end
在應用程序/模型,你會當定義custom_ability.rb:
def CustomAbility
include CanCan::Ability
def initialize(anything, you, want, here)
...
end
end
在這種情況下,任何=傳球,你= IN,想要什麼= ,這裏=這裏。另外,您可以調用您正在授權的資源上的某些方法。 CanCan的工作方式是加載@resource_name,然後輸入要授權的能力文件。它通過假設RESTful路由加載@resource_name,但只要將其存儲在@resource_name中(即將用戶存儲在@user中),就可以輕鬆使用before_filter加載自己的資源。
您還可以調用您正在授權已創建參數的對象上的某些方法。例如,你可能想要做這樣的事情:
def initialize(user)
can :read, Post do |post|
!((post.readable_groups & user.groups).empty?)
end
end
基本上,如果在該塊線路返回false,那麼你成爲非法。唯一需要注意的是該塊不會在創建或新建時執行。有辦法解決這個問題。例如,假設您在模型級別爲每個用戶強制執行一個帖子並進行唯一性驗證。您可以使用之前的過濾器來加載設置user_id的帖子,然後執行
can :create, Post, valid?: true
無論如何,希望有所幫助。
來源
2012-01-28 04:01:08
Max
CanCan不能滿足您的需求嗎?我對OAuth並不熟悉,但我想不出它不起作用的原因。 – Max 2012-01-28 00:44:06
據我從我的研究中看到,CanCan的範圍是非常傳統的RBAC。我想爲潛在的所有用戶進行動態範圍設定,所以我不能將它們放在組中(至少這是我對cancan的理解) – nambrot 2012-01-28 01:02:05
我對「動態範圍」的含義有些不確定。 – Max 2012-01-28 01:07:49