在我的项目中,有 User,Shop 和 Tag 三个 Model,一个 User 有多个 Shop,一个 Shop 下有多个 Tag,我使用 cancancan 时,需要在 current_shop(current_shop 已经被定义成一个帮助方法,获取到当前的 shop) 下创建 tag 的时候做一下权限验证,代码如下:
#ability.rb
if user.role == 'staff'
can [:read, :update, :destroy, :create], Tag, :shop_id => user.shops.ids
end
#tags_controller.rb
class TagsController < AdminController
def new
@tag = current_shop.tags.build
end
def create
@tag = current_shop.tags.build
...
end
end
但是当我用 staff 账号进行 tag 的新建的时候会提示我没有权限,为什么会这样? 如果我在验证的时候不用哈希参数新建又不会出现问题,代码如下
can [:read, :update, :destroy], Tag, :shop_id => user.shops.ids
can :create, Tag
请教各位!