For related models, LoopBack automatically related model methods corresponding to the API routes defined for the relationship.
Page Contents


限制访问相关模型

当两个模型之间的关系(见创建模型关系),LoopBack会自动创建一组methods_ _related模型定义的API路由相对应的关系。在以下列表,_modelName_的名称相关模型和_modelNamePlural_模型名称的复数形式相关。

belongsTo:

  • __get__relatedModelName

hasOne:

  • __create__relatedModelName
  • __get__relatedModelName
  • __update__relatedModelName
  • __destroy__relatedModelName

hasMany:

  • __count__relatedModelNamePlural
  • __create__relatedModelNamePlural
  • __delete__relatedModelNamePlural
  • __destroyById__relatedModelNamePlural
  • __findById__relatedModelNamePlural
  • __get__relatedModelNamePlural
  • __updateById__relatedModelNamePlural

hasManyThrough:

  • __count__relatedModelNamePlural
  • __create__relatedModelNamePlural
  • __delete__relatedModelNamePlural
  • __destroyById__relatedModelNamePlural
  • __exists__relatedModelNamePlural (through only)
  • __findById__relatedModelNamePlural
  • __get__relatedModelNamePlural
  • __link__relatedModelNamePlural (through only)
  • __updateById__relatedModelNamePlural
  • __unlink__relatedModelNamePlural (through only)

hasAndBelongsToMany:

  • __link__relatedModelNamePlural
  • __unlink__relatedModelNamePlural

您可以使用这些相关的模型方法来控制对相关路由的访问。

例如,如果用户有多个项目,LoopBack创建这些路线(以及其他)和相应的相关模型方法:

  • /api/users/count - standard method is count
  • /api/users/:id/projects - related model method is __get__projects
  • /api/users/:id/projects/count - related model method is __count__projects

设置权限相关模型方法在模型中定义JSON文件来配置访问控制这样的路由。例如,用户的ACL模型定义JSON文件(“user.json”)这些路由可能是这样的,例如:

/common/models/user.json

"acls": [{
  "principalType": "ROLE",
  "principalId": "$authenticated",
  "permission": "ALLOW",
  "property": "count"
}, {
  "principalType": "ROLE",
  "principalId": "$owner",
  "permission": "ALLOW",
  "property": "__get__projects"
}, {
  "principalType": "ROLE",
  "principalId": "$authenticated",
  "permission": "ALLOW",
  "property": "__count__projects"
}]

查询相关的模型

查询一个模型时,您可能还想返回数据的相关模型。例如,假设您有三种model:UserReport, and LineItem, where:

  • 一个 user 可以有很多 reports; 那就是说 HasMany relation  在 User 和 Report是 (User hasMany Report).
  • 一个 report 可以有很多 line items; 那就是说 HasMany relation  在 Report 和 Lineitem 是 (Report hasMany LineItem).

而且, ReportModel 已经配置了如下 ACLs, 所以 鉴权后的 用户可以创建新的记录和更新他们自己的记录:

[{
    "principalType": "ROLE",
    "principalId": "$everyone",
    "permission": "DENY"
  }, {
    "principalType": "ROLE",
    "principalId": "$owner",
    "permission": "ALLOW",
    "property": "findById"
  },
  ...
]

假设LineItem模型具有相同的ACL定义.

现在,假设你想取回属于您的用户模型也得到相关模型。 以下是你如何操作: findById() using the Node API:

Report.findById({
  id: 1,
  filter: {
    include: 'lineitems'
  }
});

使用REST API:

GET /api/Reports/110?filter={"include":["lineItems"]}

例子的结果:

{
  "name": "january report - bob",
  "id": 110,
  "userId": 100,
  "lineItemModels": [{
    "name": "lunch",
    "id": 111,
    "reportModelId": 110
  }, {
    "name": "dinner",
    "id": 112,
    "reportModelId": 110
  }]
}
Tags: models