使用CanCan授权命名空间和嵌套控制器

5
我遇到了一些问题,无法让cancan授权我下面设置的新路由:

我遇到了一些问题,无法让cancan授权我下面设置的新路由:

namespace :api do
namespace :v1 do
  resources :users do
    resources :user_songs
    resources :friendships
    resources :plays
    resources :likes
    resources :songs

我跟随这里发布的内容https://github.com/ryanb/cancan/wiki/Nested-Resources,并通过将其放在喜欢控制器之前进行测试:
class Api::V1::LikesController < Api::V1::BaseController

load_and_authorize_resource :user
load_and_authorize_resource :like, :through => :user

在ability.rb中使用:access、:all是有效的,但我尝试过限制其他内容时都没有成功,例如:

can :access, :likes
can :access, Like
can :access, :users
can :access, User
can :access, [:"users/likes", :users_likes]

我不确定责任是否在于命名空间路由。非常感谢您的任何指导!

1个回答

5
我找到了答案:最终还是命名空间的问题,只需要加上一个 / 就好了。

can :access, "api/v1/likes"


似乎这只适用于GET请求而不是POST请求。我尝试添加can :create, "api/v1/likes"来查看是否有所影响,但并没有任何变化。 - nvd
找到问题了,需要在代码中加上 ":access" 和 ":likes" 才能让它正常工作。 - nvd
1
这里曾有一个bug,但已经在1.6.10中得到了修复。 - Jared Beck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接