在我的BrandsController中,我有以下两种参数方法:
def create_brand_params
params.require(:brand).permit(:name, content_attributes: %i[app_name app_launcher_name])
end
def update_brand_params
params.require(:brand).permit(content_attributes: %i[id app_name app_launcher_name])
end
然后控制器具有如下权限:
load_resource :client
load_and_authorize_resource :brand, through: :client, shallow: true
最后是能力:
can :manage, Client, id: Client.owned_clients(user.id).map(&:id)
can :manage, Brand, client: { id: Client.owned_clients(user.id).map(&:id) }
简而言之,用户只能管理拥有客户所有权的客户和品牌。除了创建品牌之外,这在客户端以及大多数品牌方法中都能正常工作。当我尝试创建一个新品牌时,我收到以下错误:ActiveModel::ForbiddenAttributesError
但是我能够很好地编辑一个品牌......为什么我在创建时会收到此错误但不会更新?
为了澄清,用户只能为他们拥有的客户创建一个品牌,因此我无法为创建方法禁用CanCan。为了解决这个问题,我现在必须添加这个hack:
load_and_authorize_resource :brand, through: :client, except: :create
保护新方法,但允许创建不是我想要的...