2011-08-24 42 views
4

我在考虑将RefineryCMS用于包含新闻通讯,博客,论坛,教程等的大型Web应用程序。创建我所知道的这些东西RefineryCMS将会非常棒。我可以使用Cancan或类似的RefineryCMS吗?

我的问题是RefineryCMS可以处理具有不同类型访问权限的不同类型的用户吗?

如果我有一个用户是'会员',我想让他们能够访问博客和论坛,但是如果我有'高级'用户,他们应该有权阅读新闻简报,博客,论坛和教程。 'admin'用户应该能够管理和查看网站中的所有内容。

这种类型的细粒度控制不在RefineryCMS的范围之内,我应该考虑从头开始创建这个站点吗?

回答

10

是的,您可以通过将before_filter添加到适当的refinerycms控制器来添加细粒度控制。在那个before_filter中你可以使用CanCan,但是炼油厂已经有了一个角色表,你可以很容易地使用它。

例如,下面介绍一种控制对博客访问的方法。

使用您选择的控制台或其他界面,添加一个标题为“member”的新角色。

添加另一个与标题=“premium_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的/配置/ 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,管理员:: BaseController,管理员:: RefinerySettingsController,联系::博客:: PostsController等,并添加处理方法与“premium_user”等其他角色相关g关于您要实施的授权规则。

或者,你可以直接在你的应用程序/文件夹的控制器使用

rake refinery:override controller=blog_controller #for example. 

然后你就可以将呼叫类似惨惨覆盖炼油厂控制器,或过滤器之前添加上面直接。如果你重写,当它改变时升级refinerycms会有点困难,因为当它改变时,你有额外的重写和重新合并你的代码和最新版本的控制器的步骤。

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

相关问题