我有这两个模型:
class Photo < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_many :photos
end
并为角色设置了declarative_authorization
:
role :reg_ser do
has_permission_on :photos, :to => [:show] do
if_attribute :user_id => is { user.id }
end
end
我希望允许用户显示他上传的图片 - 只显示他的图片。我的意思是,例如:
user_id | photo
1 | 1
1 | 2
1 | 3
2 | 4
当用户设置网址/photos/1
时,只有当user_id
显示此地址的1
user_id=2
时,此图片才会显示,他看不到图像......
有可能做这样的事吗?
答案 0 :(得分:0)
您需要输入类似
的内容filter_access_to [:index, :new, :create]
filter_access_to [:show, :edit, :update], :attribute_check => true
在您的控制器中,类似
role :reg_ser do
has_permission_on :photos, :to => [:index, :new, :create]
has_permission_on :photos, :to => [:show, :edit: update] do
if_attribute :user_id => is { user.id }
end
end
进入authorization_rules.rb
。因此,一切正常,重要的是在控制器中包含:attribute_check
,以便检查要检查属性的每个操作。
我没有留下:index
,因为通过添加
def begin_of_association_chain
current_user
end
或与控制器类似(这会导致InheritedResources将current_user.pictures
作为集合)。
您可能也有兴趣阅读http://asciicasts.com/episodes/188-declarative-authorization