Skip to content

Instantly share code, notes, and snippets.

@coorasse
Created May 17, 2018 18:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save coorasse/f1174b618651fcee8c65525d38b36120 to your computer and use it in GitHub Desktop.
Save coorasse/f1174b618651fcee8c65525d38b36120 to your computer and use it in GitHub Desktop.
begin
require 'bundler/inline'
rescue LoadError => e
$stderr.puts 'Bundler version 1.10 or later is required. Please update your Bundler'
raise e
end
gemfile(true) do
source 'https://rubygems.org'
gem 'rails', '5.1.0' # use correct rails version
gem 'cancancan' # use correct cancancan version
gem 'sqlite3' # use another DB if necessary
end
require 'active_record'
require 'cancancan'
require 'cancan/model_adapters/active_record_adapter'
require 'cancan/model_adapters/active_record_4_adapter'
require 'cancan/model_adapters/active_record_5_adapter'
require 'minitest/autorun'
require 'logger'
# This connection will do for database-independent bug reports.
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
ActiveRecord::Base.logger = Logger.new(STDOUT)
# create your tables here
ActiveRecord::Schema.define do
create_table :users, force: true do |t|
t.string :name
end
create_table :companies, force: true do |t|
t.string :name
end
create_table :user_companies, force: true do |t|
t.references :user
t.references :company
end
end
class User < ActiveRecord::Base
has_many :user_companies
has_many :companies, through: :user_companies
end
class Company < ActiveRecord::Base
has_many :user_companies
has_many :users, through: :user_companies
end
class UserCompany < ActiveRecord::Base
belongs_to :user
belongs_to :company
end
class Ability
include CanCan::Ability
def initialize(user)
can :manage, User, User.joins(companies: :users).where(companies: { users: { id: user.id } })
end
end
class BugTest < Minitest::Test
def test_bug
user1 = User.create!
user2 = User.create!
user3 = User.create!
user4 = User.create!
company1 = Company.create!
company2 = Company.create!
UserCompany.create!(user: user1, company: company1)
UserCompany.create!(user: user2, company: company1)
UserCompany.create!(user: user3, company: company1)
UserCompany.create!(user: user4, company: company2)
ability = Ability.new(user1)
users = User.accessible_by(ability, :read).count
assert_equal 3, users
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment