spa*_*kle 13 activerecord ruby-on-rails devise ruby-on-rails-4
例:
用户A(id = 10)已创建照片资源
photo: (id: 1 user_id = 10, url: "http://...")
Run Code Online (Sandbox Code Playgroud)
现在,如果用户B(id = 20)转到此网址:/photos/1/edit它可以编辑用户A的照片!
Rails + Devise默认为此提供了一些东西?这似乎是一个非常普遍的问题
我只需要允许任何用户只能编辑/删除它创建的资源(其中current_user == resource.user)
使用: Rails 4,设计
更新:
我认为CanCan太先进了.我不需要角色或限制某些用户的某些操作
Ere*_*bih 33
在你的PhotosController中:
before_filter :require_permission, only: :edit
def require_permission
if current_user != Photo.find(params[:id]).user
redirect_to root_path
#Or do something else here
end
end
Run Code Online (Sandbox Code Playgroud)
Dan*_*sch 14
您可以使用Rails的关联并将其写为:
def edit
@photo = current_user.photos.find(params[:id])
# ... do everything else
end
Run Code Online (Sandbox Code Playgroud)
这只会在具有提供的ID的照片属于当前用户时找到记录.如果没有,Rails将引发ActiveRecord::RecordNotFound异常.
当然,我假设该current_user方法可用,并且您的User模型包含该语句has_many :photos.
| 归档时间: |
|
| 查看次数: |
16382 次 |
| 最近记录: |