【发布时间】:2016-12-08 22:28:25
【问题描述】:
我遇到了一个问题,我的 rails 应用程序的所有者无法访问我的地图控制器创建和显示方法,使用 CanCanCan gem 进行权限控制。
这是我当前配置的能力模型:
class Ability
include CanCan::Ability
def initialize(user)
if user.role.name == 'owner'
can :manage, Map, venue_id: user.company.venues.pluck(:id)
end
end
来自 user.company.venues.pluck(:id) 的输出:
Company Load (0.3ms) SELECT `companies`.* FROM `companies` WHERE `companies`.`id` = 4 LIMIT 1
(0.4ms) SELECT `venues`.`id` FROM `venues` WHERE `venues`.`company_id` = 4
=> [1]
这是我的地图控制器代码:
class MapsController < ApplicationController
before_action :authenticate_user!
respond_to :html, :json
load_and_authorize_resource
def index
respond_with(@maps)
end
def new
respond_with(@maps)
end
def create
@map = Map.create(map_params)
if @map.save
respond_to do |format|
flash[:notice] = t('floors.created')
format.json
end
else
flash[:alert] = t('floors.error')
end
end
def show
respond_with(@map)
end
def edit
end
def update
end
def map_params
params.require(:map).permit(:alias, :venue_id, :map)
end
end
地图属于场所并具有场所 ID。我可以在场地页面的地图索引部分中获取地图:
但是当我尝试创建地图或转到地图显示页面时,我收到 CanCan 访问被拒绝错误:
关于为什么 CanCanCan 允许我查看地图索引但在创建或查看地图显示控制器时访问被拒绝的任何想法。
【问题讨论】:
-
不要使用图像,而是将代码粘贴到 SO 中。此外,包括控制器代码以及能力文件代码。为什么你必须向我们展示你的 UI,这与任何事情有什么关系?最后,使用用户,
current_user.company.venues.pluck(:id)的输出是什么? -
输出是场地 ID,即 1:公司负载 (0.3ms) SELECT
companies.* FROMcompaniesWHEREcompanies.id= 4 LIMIT 1 (0.4ms)选择venues.idFROMvenuesWHEREvenues.company_id= 4 => [1] -
使用控制台,您尝试的地图的
venue_id是什么show?
标签: ruby-on-rails ruby cancancan