我正在使用CanCan开发Rails应用程序,授权。该应用程序有数据库模型User和PositionGameStat。 PositionGameStat有一个user_id的外键。 position_game_stat的索引页面显示了用户提交的统计信息列表,每个统计信息都有一个编辑按钮。目前它容易注射(.../position_game_stats/130 /编辑)CanCan授权问题 - 作者编辑Post
我希望用户只能编辑等于当前用户的position_game_stat条目。通过惨惨
换句话说,如果有人试图注入的网址.../position_game_stats/129 /编辑,他们没有进入这些统计数据,这将被拒绝访问下面是我的代码。
我的代码: 应用程序/控制器/ position_game_stats_controller.rb
class PositionGameStatsController < ApplicationController
before_filter :authenticate_user!
...
def edit
authorize! :manage, @position_game_stat
@position_game_stat = PositionGameStat.find(params[:id])
end
...
end
应用程序/模型/ ability.rb
class Ability
include CanCan::Ability
def initialize(user)
can :show, User, :id => user.id
can :manage, PositionGameStat do |t|
t.user_id == user.id
end
end
end
任何建议都欢迎和好评。
UPDATE:每陈会毅的建议 为似乎是与此代码至少在某种程度上更接近: 能力
class Ability
include CanCan::Ability
def initialize(user)
can :show, User, :id => user.id
can :manage, PositionGameStat do |t|
t.user == current_user
end
end
end
控制器
class PositionGameStatsController < ApplicationController
before_filter :authenticate_user!
...
def edit
authorize! :manage, PositionGameStat
@position_game_stat = PositionGameStat.find(params[:id])
end
...
end
这让我在这个意义上更接近,这是不拒绝访问页面,但它仍然容易受到注入。例如/ position_game_stats/137/edit仍然可以访问,即使它是由不同的用户创建的。
有什么建议吗?
为什么你在给它赋值之前授权'@ position_game_stat'?你遇到的问题是什么? – deefour
我遇到的问题是授权正在停止用户编辑position_game_stat。我为'用户'工作,所以你无法注入一个不同的用户值到params中,但现在我正在使用外键,并且在使用position_game_stat模型时遇到了问题。 – lando2319