Ruby on rails 3 我可以将RefineryCMS与Cancan或类似产品一起使用吗?

Ruby on rails 3 我可以将RefineryCMS与Cancan或类似产品一起使用吗?,ruby-on-rails-3,refinerycms,Ruby On Rails 3,Refinerycms,我正在考虑将RefineryCMS用于大型web应用程序,其中包括时事通讯、博客、论坛、教程等。创建我知道RefineryCMS非常擅长的东西 我的问题是,RefineryCMS能否处理具有不同访问/权限类型的不同类型的用户 如果我有一个“会员”用户,我想让他们能够访问博客和论坛,但如果我有一个“高级”用户,他们应该可以阅读时事通讯、博客、论坛和教程。“管理员”用户应该能够管理和查看站点中的所有内容 这种类型的细粒度控制是否超出了RefineryCMS的范围,我是否应该考虑从头开始创建此站点?是

我正在考虑将RefineryCMS用于大型web应用程序,其中包括时事通讯、博客、论坛、教程等。创建我知道RefineryCMS非常擅长的东西

我的问题是,RefineryCMS能否处理具有不同访问/权限类型的不同类型的用户

如果我有一个“会员”用户,我想让他们能够访问博客和论坛,但如果我有一个“高级”用户,他们应该可以阅读时事通讯、博客、论坛和教程。“管理员”用户应该能够管理和查看站点中的所有内容


这种类型的细粒度控制是否超出了RefineryCMS的范围,我是否应该考虑从头开始创建此站点?

是的,您可以通过向相应的RefineryCMS控制器添加前过滤器来添加细粒度控制。在此之前的过滤器中,您可以使用CanCan,但refinerycms已经有了一个角色表,您可以轻松利用它

例如,这里有一种方法可以控制对博客的访问

使用控制台或您选择的其他界面,使用title=“member”添加新角色

使用title=“premium\u用户”添加另一个

然后(如果您的身份验证模型称为用户),在控制台中

>member1 = User.find(1)
>member1.roles << Role.where(:title=>"member").first
>member1.save
在MyApp/config/application.rb中,设置before_过滤器,以便在开发模式下每次调用时重新加载它,以防在服务器运行时更改它

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
然后,您可以合并对CanCan之类的调用,或者直接在上面添加before过滤器。如果您重写,则在发生更改时升级refinerycms会有点困难,因为在代码发生更改时,您有额外的步骤重新重写代码并将其与最新版本的控制器重新合并

Re:“admin”用户,refinerycms已经准备利用title=“Superuser”角色,并要求至少有一个用户具有该角色。它预先配置了一些授权逻辑,用于超级用户可以执行那些没有该角色的用户无法执行的操作

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
rake refinery:override controller=blog_controller #for example.