Гем CanCan больше не поддерживается . Используйте другую библиотеку авторизации, например CanCanCan или Pundit.
<img src="https://fury-badge.herokuapp.com/rb/cancan.png" alt="Gem Version" /> <img src="https://secure.travis-ci.org/ryanb/ cancan.png?branch=master» /> <img src="https://codeclimate.com/github/ryanb/cancan.png" />
Вики | РДокс | Скринкаст
CanCan — это библиотека авторизации для Ruby on Rails, которая ограничивает ресурсы, к которым разрешен доступ данному пользователю. Все разрешения определяются в одном месте (класс « Ability
») и не дублируются между контроллерами, представлениями и запросами к базе данных.
В Rails 3 добавьте это в свой Gemfile и запустите команду bundle
.
драгоценный камень «канкан»
В Rails 2 добавьте это в файл Environment.rb.
конфигурация . драгоценный камень «канкан»
Альтернативно, вы можете установить его как плагин.
установка плагина рельсов git://github.com/ryanb/cancan.git
CanCan ожидает, что в контроллере будет существовать метод current_user
. Сначала настройте аутентификацию (например, Authlogic или Devise). См. раздел «Изменение значений по умолчанию», если вам нужно другое поведение.
Разрешения пользователя определяются в классе Ability
. CanCan 1.5 включает генератор Rails 3 для создания этого класса.
рельсы g cancan: способность
В Rails 2.3 просто добавьте новый класс в app/models/ability.rb со следующим содержимым:
классовая способность включить CanCan :: Способность def инициализировать ( пользователь ) конец конец
Подробности см. в разделе «Определение способностей».
Затем разрешения текущего пользователя можно проверить с помощью can?
и cannot?
методы в представлении и контроллере.
<%, если можно? :обновление, @article %> <%= link_to "Редактировать", edit_article_path(@article) %> <% конец %>
См. раздел «Проверка способностей» для получения дополнительной информации.
authorize!
метод в контроллере вызовет исключение, если пользователь не сможет выполнить данное действие.
определенно шоу @article = Статья . найти ( параметры [ :id ]) разрешите! :читай , @article конец
Установка этого параметра для каждого действия может оказаться утомительной, поэтому предусмотрен метод load_and_authorize_resource
для автоматической авторизации всех действий в контроллере ресурсов в стиле RESTful. Он будет использовать фильтр «до» для загрузки ресурса в переменную экземпляра и авторизации его для каждого действия.
класс ArticlesController < ApplicationController load_and_authorize_resource определенно шоу # @article уже загружена и авторизована конец конец
Дополнительную информацию см. в разделе Авторизация действий контроллера.
Если авторизация пользователя не удалась, будет создано исключение CanCan::AccessDenied
. Вы можете уловить это и изменить его поведение в ApplicationController
.
класс ApplicationController < ActionController :: Base Rescue_from CanCan :: Доступ запрещен, сделать | исключение | redirect_to root_url , :alert => исключение . сообщение конец конец
Дополнительную информацию см. в разделе «Обработка исключений».
Если вы хотите, чтобы авторизация выполнялась при каждом действии в вашем приложении, добавьте check_authorization
в свой ApplicationController.
класс ApplicationController < ActionController :: Base check_authorization конец
Это вызовет исключение, если авторизация не выполняется в действии. Если вы хотите пропустить это, добавьте skip_authorization_check
в подкласс контроллера. Дополнительную информацию см. в разделе «Обеспечение авторизации».
Обновление до 1.6
Определение способностей
Проверка способностей
Авторизация действий контроллера
Обработка исключений
Изменение настроек по умолчанию
Посмотреть больше
Если у вас возникли проблемы с CanCan, решения которых вы не можете найти в документации, добавьте проблему на GitHub или создайте форк проекта и отправьте запрос на включение.
Чтобы запустить спецификации, вам следует вызвать bundle
, а затем rake
. Дополнительную информацию смотрите в спецификации/README.
CanCan был вдохновлен declarative_authorization и Aegis. Также большое спасибо участникам CanCan. Полный список смотрите в CHANGELOG.