解决方法
Devise只会为您提供身份验证.这意味着您具有一定程度的确定性,即用户被识别并且他/她是谁/他是谁.根据这些信息,您可以使用Rails机制或其他Rails gem(即CanCan,Aegis,declarative_authorization)来授权用户和定义权限.
一个简单的方法是在您的控制器上使用before_filter,以确定,例如,BlogPost是否属于已登录的用户.
这是我的意思的一个简单例子:
class BlogPostsController < ApplicationController before_filter :is_user_allowed,:only => [:edit,:delete,:show] # default Rails generated RESTful methods here def is_user_allowed if BlogPost.find(params[:id]).try(:user_id) != current_user.id redirect_to access_denied_page_path end end end
is_user_allowed方法检索正在查询的BlogPost,并确定是否允许current_user通过比较用户ID来执行操作.如果不等式为真,那么它会重定向到我们臭名昭着的access_denied_page_path.
有关过滤器的更多信息,请参阅此Edge Guides article.
有关可以为您提供此功能的Rails宝石的更多信息(以及更多),请浏览Google并搜索rails授权.更重要的是,这里有一些应该提供一些见解的Railscast:
> 192 – Authorization with CanCan
> 188 – Declarative Authorization