ruby-on-rails - 使用 CanCan,我如何根据关联/子属性限制能力

标签 ruby-on-rails ruby-on-rails-3 postgresql cancan rails-activerecord

我有一个数据库设置,其中有许多用户,这些用户具有成员或管理员的角色。每个用户有很多辆车。每辆车都有很多次

那么,只有当用户是母车的车主时,我该如何限制用户编辑 Timeslip 的能力。

在 CanCan 中:

class Ability
    include CanCan::Ability

    def initialize(user)
        user ||= User.new # guest user (not logged in)
        if user.has_role? :admin
            can :manage, :all
        elsif user.has_role? :member
            can :manage, Car, :user_id => user.id
            can :manage, Timeslip, :car => {:user_id => user.id}
        end
    end
end

can :manage, Timeslip, :car => {:user_id => user.id} 这行是我需要帮助的地方。

因为 Timeslip 是 Car 的关联/子项,我需要检查其父项 car.user_id = Cancan user.id

我认为我的写法符合 CanCan 文档,但我哪里出错了?

最佳答案

可能有更短的写法,但这行得通:

can :manage, Timeslip do |timeslip|
     timeslip.car.user_id == user.id
end

关于ruby-on-rails - 使用 CanCan,我如何根据关联/子属性限制能力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14427053/

相关文章:

ruby-on-rails - 这可能在 Controller 测试中吗?

ruby-on-rails - 如何使用 mailman 处理电子邮件线程

ruby-on-rails - 在嵌套对象中搜索太阳黑子

ruby-on-rails - 环境/开发 Assets 路径的副本在 gems 目录中找不到 jquery-ui-rails

ruby-on-rails - 如何在 Rails 3.1 中获取片段到期日期?

python - python manage.py migrate 出现问题 -> 没有名为 psycopg2 的模块

ruby-on-rails - 如何在 Rails 日志中包含设计用户名(使用 graylog2)

javascript - Backbone.js 应用程序能否逐步增强并可被搜索引擎抓取?

python - Django 测试需要很长时间才能启动

postgresql - 在 PostgreSQL 中循环