1

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

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

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

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

向正确方向轻推将不胜感激。谢谢!

我的应用程序的一些背景

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

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

(我知道嵌套资源比一层更深并不是最佳实践,但是我刚刚跳上了 Rails 火车, :shallow = true 并没有提供我想要的结果。)

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

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

4

1 回答 1

0

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

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

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 是我希望允许访问 model_instance 的角色。

更新

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

于 2015-02-18T00:17:22.240 回答