当前位置: 首页 > 文档资料 > Loopback 中文文档 >

1.5.3 用户区分

优质
小牛编辑
127浏览
2023-12-01

Partitioning users with realms (用户区分)

默认情况下, User Model 管理所有用户在一个全局命名空间. 它不隔离不同的应用程序.
在某些情况下, 需要在让不同的用户拥有一些不同的命名空间.

Loopback 支持领域划分:

  • Users 和 applications 属于 一个全局的领域(或者说是没有领域).
  • 将用户和 applications 规划到不同的领域, 一个用户 和 一个 application 只能属于一个领域 .每个领域可以拥有多个用户,多个 application.
  • 每个 application 是一个独特的境界, 每个用户都属于一个 application (通过 realm)

每个应用程序或用户实例,都有一个唯一的 ID 访问境界, 当一个应用程序/用户登录时,它可被分配给一个境界. 在 User.login() 方法里:

  • 赋予realm(领域)属性 从 user credential(凭据)
  • 允许从 用户名/电子邮件 的前缀中提取的 realm(领域) 信息

设置 User model options 属性 的控制领域:

  • realmRequired (Boolean): true | false (default)
  • realmDelimiter (string): 如果配置, email 或者 username 就会加上前缀: <realm><realmDelimiter><username or email>

demo 用户属性设置:

// server/model-config.json
"User": {
  "dataSource": "db",
  "options": {
    "realmRequired": true,
    "realmDelimiter": ":"
  }
}

当 realms(领域)开启后, 在使用 User.create() 时,需要指定 realm 属性.

例如:


User.create({
  realm: 'myRealm',
  username: 'john',
  email: 'john@sample.com',
  password: 'my-password'
}, callback);

用户登录的时候 User.login() 也需要realm属性

User.login({
  realm: 'myRealm',
  username: 'john',
  password: 'my-password'
}, callback);

// 或者用这种方式登录
User.login({
  username: 'myRealm:john',
  password: 'my-password'
}, callback);