Могу ли я использовать RefineryCMS с Cancan или чем-то подобным?

Я подумываю об использовании RefineryCMS для большого веб-приложения, которое будет включать в себя информационные бюллетени, блоги, форумы, учебные пособия и т. д. Создание тех вещей, которые, как я знаю, RefineryCMS были бы великолепны.

Мой вопрос: может ли RefineryCMS работать с разными типами пользователей с разными типами доступа/разрешений?

Если у меня есть пользователь, который является «членом», я хотел бы дать ему возможность доступа к блогу и форуму, но если у меня есть «премиум» пользователь, у него должен быть доступ к чтению информационных бюллетеней, блогов, форумов и руководств. Пользователь «администратор» должен иметь возможность управлять и видеть все на сайте.

Является ли этот тип мелкозернистого контроля за рамками RefineryCMS, и должен ли я просто рассмотреть возможность создания этого сайта с нуля?


person map7    schedule 24.08.2011    source источник


Ответы (1)


Да, вы можете добавить мелкозернистый контроль, добавив фильтр 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