# CanCanCan - Developer guide

This is the official guide to CanCanCan.

It will advance chapter by chapter and go more and more into details, advanced usages, and special cases.

We will start by introducing basic concepts and features, and then dig deeper into configurations and implementation details in later chapters.

You can skip the [Introduction](./introduction.md) where there's just some history and blablabla and go directly to [Installation](./installation.md) to start fast :rocket:.

## Summary

1. [Introduction](./introduction.md)
1. [Installation](./installation.md)
1. [Define and check abilities](./define_check_abilities.md)
1. [Controller helpers](./controller_helpers.md)
1. [Fetching records](./fetching_records.md)
1. [Cannot](./cannot.md)
1. [Hash of conditions](./hash_of_conditions.md)
1. [Combine Abilities](./combine_abilities.md)
1. [Check abilities - avoid mistakes](./check_abilities_mistakes.md)
1. [Handling CanCan::AccessDenied](./handling_access_denied.md)
1. [Customize controller helpers](./changing_defaults.md)
1. [Accessing request data](./accessing_request_data.md)
1. [SQL strategies](./sql_strategies.md)
1. [Accessible attributes](./accessible_attributes.md)
1. [Testing](./testing.md)
1. [Internationalization](./internationalization.md)

## Further topics

In these topics, you will learn some best practices, but also how to solve specific integration issues with other libraries or how to extend CanCanCan.

1. [Migrating](./migrating.md)
1. [Debugging Abilities](./debugging.md)
1. [Split your ability file](./split_ability.md)
1. [Define Abilities - best practices](./define_abilities_best_practices.md)
1. [Abilities in database](./abilities_in_database.md)
1. [Role-based Authorization](./role_based_authorization.md)
1. [Model Adapter](./model_adapter.md)
1. [Rules compression](./rules_compression.md)
1. [Inherited Resources](./inherited_resources.md)
1. [Devise](./devise.md)
1. [FriendlyId](./friendly_id.md)
