2011-07-27 142 views
1

使用devise,我有一个用户模型。我没有用户控制器。CanCan +为设计用户模型设计

要使用惨惨我需要在我的控制器

​​

我在哪里添加此上方做(下),所以我可以有用户权限模型给出我没有用户控制器?

感谢

回答

7

您可以在代码添加到您需要验证任何控制器,你并不需要一个UsersController

before_filter :authenticate_user! 

这一行需要与色器件签订一个有效的用户,因此,如果您尝试与此的before_filter访问控制器没有被记录,你会用色器件被重定向到sign_in_path

load_and_authorize_resource # CanCan 

这一行将填充实例变量为默认值(如果尚未设置),然后使用Ability类检查您的权限,因此假设您有一个ArticleController它将在幕后执行以下操作(实际代码基于当前动作)

# for the show action 
@article = Article.find(params[:id]) 
raise CanCan::AccessDenied unless can(:read, @article) 

can(:read, @article)语句是惨惨图书馆的壁炉,它会返回基于你的能力类的布尔值。可以阅读更多关于它here

如果你的整个应用程序要求身份验证可以在before_filter :authenticate_user!线只需添加到ApplicationController

+0

正确的,但我在哪里可以设置用户可以使用惨惨不是密码修改有信息,但。 – AnApprentice

+0

因为'load_and_authorize_resource'中定义的默认规则不好。最简单的方法是使用[ActiveRecord类的attr_accessible或attr_protected宏](http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html)并使用批量分配更新用户属性。不需要CanCan来完成这样的任务。对于其他使用能力类阅读[我的上一个链接](https://github.com/ryanb/cancan/wiki/Defining-Abilities) – Fabio

+2

您可以创建自定义的能力(例如'can?:edit,:password') CanCan并根据需要在应用程序中检查它们。 –