是的,您可以通过将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个用户具有该角色。它预先配置了一些授权逻辑,以供超级用户可以执行的操作,那些没有该角色的用户无法做到这一点。