Cancan,检查班级能力的问题

时间:2014-04-25 11:30:14

标签: ruby-on-rails ruby cancan

我有这段代码:

can :create, Project { |instance| some_statement }  

稍后我想添加这样的条件:如果用户可以创建一些Project,那么他可以阅读ProjectTemplate。但我不能这样做:

if can? :create, Project
  can :read, ProjectTemplate
end

因为if-condition总是如此。另外,我不能只是把它? :create,Project.new,因为在我的:create, Project {}声明中不仅仅是.new object

有什么建议吗?我做错了吗?

1 个答案:

答案 0 :(得分:0)

要以稍微不同的方式查看它,您是否可以没有用户能够创建项目的角色(例如project_creator),然后只使用以下

    if user.role? :project_creator
      can :create, Project { |instance| some_statement }
      can :read, ProjectTemplate
    end

我意识到这并不是你想要的,但我认为一个明智的人群阅读模板并不是一个安全风险?

我对创建项目有条件感到有点困惑,实例语句意味着某些逻辑正在应用于特定实例。但是,如果尚未创建项目,则没有实例?

我使用该方法的方式类似于以下

can [:read], User do |thisuser|
  thisuser == user
end