Да, вы можете добавить мелкозернистый контроль, добавив фильтр before_filter к соответствующим контроллерам Refinerycms. В этом before_filter вы можете использовать CanCan, но в Refinerycms уже есть таблица ролей, которую вы можете легко использовать для этого.
Например, вот один из способов управления доступом к блогу.
Используя консоль или другой интерфейс по вашему выбору, добавьте новую роль с title="member".
Добавьте еще один с title="premium_user"
Затем (если ваша модель аутентификации называется User) в консоли
>member1 = User.find(1)
>member1.roles << Role.where(:title=>"member").first
>member1.save
Точно так же вы должны добавить роль «premium_user» для нужных пользователей.
Создайте MyApp/lib/restrict_blog_to_member_role.rb
module RestrictBlogToMemberRole
def restrict_blog_to_member_role
return true unless !(current_user.try(:has_role? "member")
flash[:notice]="Please become a member with us before accessing the blog."
redirect_to home_path #or some other destination path that exists
return false
end
end
В MyApp/config/application.rb настройте фильтр before_filter, чтобы он перезагружался при каждом вызове в режиме разработки, если вы измените его при работающем сервере....
module MyApp
class Application < Rails::Application
....
config.before_initialize do
require 'restrict_blog_to_member_role'
end
config.to_prepare do
BlogController.send :include, RestrictBlogToMemberRole
BlogController.send :before_filter, :restrict_blog_to_member_role
end
....
end
end
Вы можете сделать то же самое с другими контроллерами нефтепереработки, такими как PagesController, Admin::BaseController, Admin::RefinerySettingsController, Admin::Blog::PostsController и т. д., и добавить методы, работающие с другими ролями, такими как «premium_user», в зависимости от правил авторизации. вы хотите реализовать.
Кроме того, вы можете переопределить контроллеры нефтеперерабатывающего завода непосредственно в папке вашего приложения/контроллеров, используя
rake refinery:override controller=blog_controller #for example.
Затем вы можете включить вызовы чего-то вроде CanCan или напрямую добавить фильтры до. Если вы переопределяете, будет немного сложнее обновить Refinerycms при его изменении, потому что у вас есть дополнительный шаг повторного переопределения и повторного слияния вашего кода с последней версией контроллера, когда он изменится.
Re: пользователь «admin», Refinerycms уже собирается использовать роль с title = «Superuser» и требует, чтобы по крайней мере 1 пользователь имел эту роль. Он поставляется с предварительно настроенной логикой авторизации для того, что может делать суперпользователь, чего не могут сделать те, у кого нет этой роли.
person
Anatortoise House
schedule
24.08.2011