一段时间以来,我一直坚持这一点,但我没有得到可以使它工作的语法。我想授权用户根据他在关联中的角色更新实例的属性。
我已经尝试过这样的事情,但是在尝试更新其他属性时它不会引发错误
用户模型
class User < ActiveRecord::Base
rolify
...
end
项目模型
class Project < ActiveRecord::Base
resourcify
has_many :stories, dependent: :destroy
...
end
故事模型
class Story < ActiveRecord::Base
belongs_to :project
...
end
故事控制器
class StoriesController < ApplicationController
...
def update
story = Project.find(params[:project_id]).stories.find(params[:id])
authorize! :update, story
if story.update_attributes(story_params)
render json: story
else
render status: :unprocessable_entity, json: {errors: story.errors}
end
end
...
end
能力.rb
def initialize(user)
@user = user || User.new
can :update, Story, :points do |s|
@user.has_role?(:team_member, s.project)
end
end