在我的应用程序中,我有几个用户角色;客户,销售人员,管理员和superadmin。在我的能力课程中,我根据这些角色定义了各种能力。
我目前为销售人员定义的唯一角色如下:
# Salesperson Abilities
if user.role == 'salesperson'
can :create, User, :role => 'customer'
end
不幸的是,以下检查始终返回true,允许销售人员创建任何用户,无论角色如何:
can? :create, User, :role => @user.role
我已经运行了许多测试,验证当前用户的角色和正在创建的角色,无论我在:role
条件中放置了什么角色,能力检查总是返回true。如果我完全删除该功能,或者我使用cannot
定义,则检查返回false,因此我知道条件中的能力正在应用。
我没有正确定义或检查能力条件吗?感谢。
我注意到如果我尝试使用authorize! :create, @user
授权该功能,则会应用这些条件。如果我在控制器类的顶部定义load_and_authorize_resource
,它们也会被应用。当我尝试在控制器内部使用can?
方法时,这些似乎只会失败。
答案 0 :(得分:1)
在documentation我发现了以下内容:
重要提示:在检查类的权限时,不会使用条件哈希或块。
在这种情况下,解决方案是不检查类的权限,而是检查实例上的权限,例如can? :create, @user
或can? :create, User.new
答案 1 :(得分:0)
此逻辑不属于某种能力。该能力应该定义如何修改对象的规则,而不是在这些对象内修改哪些数据。此逻辑属于您的用户模型,因为它处理模型的实际数据及其保存方式。这有意义吗?