我正在考虑将RefineryCMS用于大型网络应用程序,其中包括新闻通讯,博客,论坛,教程等。创建我所知道的RefineryCMS会很棒。
我的问题是,RefineryCMS可以处理具有不同类型访问/权限的不同类型的用户吗?
如果我的用户是“会员”,我想让他们能够访问博客和论坛,但如果我有“高级”用户,他们应该可以阅读新闻简报,博客,论坛和教程。 “admin”用户应该能够管理并查看网站中的所有内容。
这种细粒度控制是否属于RefineryCMS的范围,我应该考虑从头开始创建这个网站吗?
答案 0 :(得分:10)
是的,您可以通过在适当的refinerycms控制器中添加before_filter来添加细粒度控制。在那个before_filter中你可以使用CanCan,但是refinerycms已经有了一个你可以轻松利用的角色表。
例如,这是控制博客访问权的一种方法。
使用您选择的控制台或其他界面,添加title =“member”的新角色。
使用title =“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 / 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”,具体取决于你想要实施什么授权规则。
或者,您可以使用
直接在app / controllers文件夹中覆盖炼油厂控制器rake refinery:override controller=blog_controller #for example.
然后您可以将调用合并到CanCan之类的内容,或直接添加上面的过滤器。如果覆盖,则在更改时更新refinerycms有点困难,因为当它发生更改时,您需要重新覆盖并重新合并代码与最新版本的控制器。
Re:“admin”用户,refinerycms已经开始利用title =“超级用户”的角色,并要求至少有1个用户拥有该角色。它预先配置了一些授权逻辑,用于超级用户可以做的事情,那些没有该角色的人不能。