后台用户模型与注册用户

Backand user model vs registered users

我需要指定 firstName、lastName 和 email 之外的其他字段,这似乎是我在我的应用程序中调用 Backand.user.getUserDetails() 时返回给我的所有内容,尽管在模型中指定了更多字段.所以它似乎是将这些从 "registered users" 中拉出来而不是 "users" 模型?

我还希望能够允许用户更新这些字段。但是我当然不希望用户能够更新其他人的字段,这是 运行 对任何具有角色 "User" 的模型项的更新似乎能够做到的。

是否需要添加很多服务器端功能才能实现此目的,或者我的方法是否错误 - 真的会假设 Backand 会开箱即用吗?

这里似乎有几个问题,所以让我尽力解决所有问题。 Backand 中有两种类型的用户对象 - registered_users,它由授予使用 Backand 应用程序权限的身份验证实体组成,以及 users,它是 Backand 应用程序中的数据库对象,就像任何应用程序一样其他。 registered_users table 仅用于管理与身份验证和为用户分配安全角色相关的详细信息 - 特定于应用程序的数据应存储在数据模型的 users 对象中。

Backand 平台使用安全操作来尝试维持这两个 table 之间的联系。这意味着(如果您没有修改默认操作)平台将在用户注册时在 users 对象中创建一个新条目,在从 users 对象中删除该用户时从 users 对象中删除该用户应用程序,它将尝试将收到的任何更新推送到 users 对象。虽然您不能修改 registered_users 对象来添加或删除字段,但您可以提供一个参数散列,该操作将使用该散列来填充用户对象。此参数的格式非常简单 "column": "value",其中 column 是应用自定义用户对象中列的名称,value 是您希望插入该列的值.有关详细信息,请参阅 http://docs.backand.com/#signup

请注意,如果某个字段不存在,或者标记为必填但未提供,则调用将失败并在 usersregistered_users 之间造成差异。

我们的目标之一是对开发人员施加尽可能少的限制 - 我们的上述方法表明了这一点。我们必须处理许多不同的潜在用例,并不是所有的用例都可以通过与 users 对象的更深入集成来帮助 - 这样做会使 users 对象成为必需的组件,影响应用程序的架构和结构。然后,围绕用户对象的所有权添加安全限制只会增加隐藏的复杂性 - 虽然这对您的应用程序来说是必需的,但对于 每个 应用程序来说都不是必需的。

回复:将编辑仅限于用户拥有的对象,您可以采用几种方法在 Backand 中实现此目的:

  1. 完全在客户端的应用程序代码中实施保护。这为您提供了最大的灵活性来处理如何防止未经授权的用户进行更新。
  2. 您可以使用预定义的过滤器来过滤为具有非管理员角色的用户检索的对象。它可以从对象 -> object_name 下的 Security 选项卡中获得。那里有一些关于如何开始的文档,但最相关的部分是顶部的 "wizard" 组件 - 默认代码应该做一些非常接近你正在寻找的事情
  3. 为每个相关的数据库操作(创建、更新、删除)使用自定义操作,以防止不拥有他们正在使用的对象的用户进行更新。

每种方法都有其优点和缺点。第一种方法使您的应用程序的逻辑近在咫尺,但无法防止恶意实体更改通过来自 SDK 的 Web 请求发送到 Backand 的参数。第二种可行,但将以可能与您的应用程序架构不兼容的方式在全球范围内应用。第三种方法是最好的折衷方案,但增加了在多个位置管理相同代码的复杂性。有一些策略可以解决这个问题,但正确的答案在很大程度上取决于您的特定应用程序的功能和特性。