Sha256: 43110a0705ce83f65ce7e6a0c3795fd41ca79a17c79ba138a58216f32fc7867f

Contents?: true

Size: 1.68 KB

Versions: 3

Compression:

Stored size: 1.68 KB

Contents

# Cancando
[![Gem Version](https://badge.fury.io/rb/cancando.svg)](https://badge.fury.io/rb/cancando)

Helper for [Cancancan](https://github.com/CanCanCommunity/cancancan) gem.

Increase `accessible_by` query performance via ability merging.

If your app have more than one ability declaration for one resource
```ruby
can :index, User, id: [1, 2, 3]
can :index, User, id: [4, 5, 6]
```
`User.accessible_by(ability, :index)` generates sql query like that:
```sql
SELECT users.* FROM users WHERE (users.id IN (4, 5, 6)) OR (users.id IN (1, 2, 3))
```

In case of big data that fact causes significant performance issue.

Cancando helps to avoid that situation by merging conditions:
```ruby
can :index, User, id: [1, 2, 3, 4, 5, 6]
```

## Installation

Add this line to your application's Gemfile:

```ruby
gem 'cancando'
```

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install cancando

## Usage

Important. You have to install [Cancancan](https://github.com/CanCanCommunity/cancancan) gem first.

1) Add `include Cancando`
2) User `can_do` and `cannot_do` instead of `can` and `cannot` from cancancan
3) Call `apply` for merge and save abilities

Simple example:
```ruby
class Permission
  include Cancando
  
  def grant_permission
    can_do :index, User, company_id: available_company_ids
    can_do :update, Company, id: current_user.company_id
    apply
  end
end
```

## Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/viktormarkov/cancando. This project is intended to be a safe, welcoming space for collaboration.

## License

The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
cancando-1.3.0 README.md
cancando-1.2 README.md
cancando-1.1 README.md