sev*_*ens 2 ruby-on-rails devise ruby-on-rails-3
我正在使用Rails,Devise和Mongoid.
用户只能拥有一个项目(has_one :profile
),但所有用户(以及未经过身份验证的用户)都可以看到项目列表(我有这个工作).当用户登录时,他们会看到项目旁边的"编辑和删除"按钮(通过将这些按钮包装在其中<% if user_signed_in? %>
).但是,登录用户会看到所有项目旁边的这些按钮,并且可以编辑或删除它们.
如何限制登录用户只能编辑他的项目?
作为奖励,是否可以在属于登录用户的项目周围显示特定内容或html(例如,"这是您的项目"的文本或项目的html附加类)?
当多个用户能够修改相同的资源时,CanCan非常棒,您需要跟踪谁拥有哪些权限.但是,如果严格的情况是只有拥有该项目的用户才能对其进行修改,那么CanCan可能就是矫枉过正.
按照iouri的建议隐藏视图中的链接,然后在控制器中执行以下操作:
def edit
if current_user != @project.user
# Redirect them to an error page
else
# Render the view
end
end
Run Code Online (Sandbox Code Playgroud)
更好的是,创建一个方法,如:
def user_owns_project?
@project.user == current_user
end
Run Code Online (Sandbox Code Playgroud)
然后设置一个前置过滤器进行编辑,更新和销毁,以便在用户不拥有项目时重定向到错误页面.
编辑:你之前的过滤器也将找到项目和设置@project
.CanCan也可以为您解决这个问题load_and_authorize_resource
,但我仍然会避免使用它,除非您需要或期望需要细粒度的权限控制.
归档时间: |
|
查看次数: |
2131 次 |
最近记录: |