是的,您可以通过将 before_filter 添加到适当的refinerycms 控制器来添加细粒度控制。在那个 before_filter 中你可以使用 CanCan,但是炼油厂已经有一个角色表,你可以很容易地利用它。
例如,这是控制对博客的访问的一种方法。
使用您选择的控制台或其他界面,添加一个 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 会有点困难,因为当它发生变化时,您有一个额外的步骤,即用最新版本的控制器重新覆盖和重新合并您的代码。
回复:“admin”用户,refinerycms 已经准备使用 title="Superuser" 的角色,并要求至少有 1 个用户拥有该角色。它预先配置了一些授权逻辑,超级用户可以做什么,而没有该角色的人不能。