加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-3 – 我可以将RefineryCMS与Cancan或类似产品一起

发布时间:2020-12-17 03:53:01 所属栏目:百科 来源:网络整理
导读:我正在考虑将RefineryCMS用于大型网络应用程序,其中包括新闻通讯,博客,论坛,教程等.创建我所知道的那些我认识的RefineryCMS会很棒. 我的问题是,RefineryCMS可以处理不同类型的用户具有不同类型的访问/权限吗? 如果我有一个“会员”用户,我想让他们能够访问
我正在考虑将RefineryCMS用于大型网络应用程序,其中包括新闻通讯,博客,论坛,教程等.创建我所知道的那些我认识的RefineryCMS会很棒.

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

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

这种细粒度控制是否属于RefineryCMS的范围,我应该考虑从头开始创建这个网站吗?

解决方法

是的,您可以通过在适当的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 =“超级用户”的角色,并要求至少有一个用户拥有该角色.它预先配置了一些授权逻辑,超级用户可以做什么,没有那个角色的人不能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读