【问题标题】:How to restrict access to models in Ruby on Rails 4 using Pundit and Rolify如何使用 Pundit 和 Rolify 限制对 Ruby on Rails 4 中模型的访问
【发布时间】:2015-02-17 03:03:52
【问题描述】:

在过去的几个月里,我才刚刚开始使用 Rails,并且在我目前的项目中遇到了第一个真正的障碍,我一直无法找到答案。

我的目标是对哪些用户角色/组(由 Rolify 生成并由 Pundit 控制)实施一些细粒度的控制,这些用户角色/组可以通过 Upmin 管理控制台访问特定类别、子类别或文章。一个类别/文章应该能够允许多个用户角色/组访问其内容。

答案here 演示了将角色范围限定为模型的特定实例,这很好,但我还希望通过我的应用程序管理控制台中的一个简单复选框表单从模型实例中进行控制(Upmin_admin 用于有兴趣的人)。

除了在管理控制台中创建一个类别/文章实例视图部分之外,我认为没有太多可以产生此功能是否正确,该视图列出了该特定角色的所有角色/组及其当前 CRUD 设置类别/文章实例。还是我遗漏了一些中间步骤?

非常感谢您朝正确的方向轻推。 谢谢!

我的应用的一些背景

在我的网络应用程序中,我嵌套了资源、类别、文章和 cmets,如下所示:

resources :categories do
  resources :articles do
    resources :microposts, only: [:new, :create, :edit, :destroy
  end
end

(我知道best practice 的嵌套资源不超过一层,但是我刚刚跳上 Rails 火车, :shallow = true 并没有提供我想要的结果。)

类别充当由 Awesome Nested Set 提供的嵌套集,并且能够“保存”类别和文章(以及扩展的 cmets)。

用户通过使用 Devise 的 LDAP 服务器进行身份验证 - 我将在不久的将来对其进行配置,以自动将用户分配到正确的组/角色。

【问题讨论】:

    标签: ruby-on-rails-4 devise rolify pundit awesome-nested-set


    【解决方案1】:

    通过重新阅读 Rolify documentation,我想出了解决问题的开始。

    每当用户创建类别、子类别或文章时,我都会运行

    user.add_role :current_role Model.Instance_id
    

    然后我可以通过获取实例 ID 从管理门户进行查询。然后通过查询系统中的所有用户角色并将它们与实例关联角色进行比较,我可以为管理控制台创建视图部分。

    model_instance = Model.find(instance_id)
    model_instance.roles #returns all of the roles associated with that instance
    

    我还需要创建一些方法来处理角色的(大量)分配/重新分配,以便在(取消)选中复选框时实现预期结果,例如向实例添加角色/组反之亦然。可能类似于(遵循红宝石风格的伪代码!!)

    users = User.with_any_role(:some_role)
    
    def assignRoleToModel(model_instance, users, role)
      if model_instance.roles.empty?
        users.each { |u| u.add_role creatorRole model_instance }
      end
      flash[:warning] = "#{Model_instance.name} already has that role assigned to it!"
    end
    

    其中 model_instance 是我要控制组/角色访问的模型实例,users 是具有我要添加到 model_instance 的角色的用户列表,role 是我希望允许访问的角色模型实例。

    更新

    一个如何通过https://github.com/RolifyCommunity/rolify/issues/246表单控制角色的例子

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 2016-06-02
      • 1970-01-01
      • 2010-12-22
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多