Loopbackは、モデル全体またはそのMEHODSへのアクセスを制限するための優れた「クラスレベル」ACLを提供しますが、個々のオブジェクトへのアクセスを再開する能力が大きく欠けています。このプロジェクトは、各オブジェクトにオブジェクトレベルのACLを設定することにより、これを解決しようとし、ループバックのクエリを操作して、リクエストユーザーがアクセスできるオブジェクトのみを返すようにします。
Circleci:
3人のユーザー(ID: "aaa"、 "bbb"、id: "ccc")が読み取り可能(しゃれを意図した)のみ(しゃれを意図して)したいとしましょう。
POST /api/books
{
"title" : "Clean Code" ,
"subtitle" : "A Handbook of Agile Software Craftsmanship" ,
"_acl" : {
"r_perm" : {
"users" : [ "aaa" , "bbb" , "ccc" ]
}
}
}ミックスインは、マンゴのように保存するオブジェクトを解析します。
{
id : ObjectId ( "123" ) ,
title : "Clean Code" ,
subtitle : "A Handbook of Agile Software Craftsmanship" ,
r : {
u : [ "aaa" , "bbb" , "ccc" ]
g : [ ]
} ,
w : {
u : [ ] ,
g : [ ]
}
}このオブジェクトは、「AAA」、「BBB」、または「CCC」のIDを持つユーザーがのみアクセスできるようになりました。検索すると、ミックスインはオブジェクトのACLを再び解析します。
GET /api/books/123
authorization: accessToken-aaa
返品:
{
"id" : "123"
"title" : "Clean Code" ,
"subtitle" : "A Handbook of Agile Software Craftsmanship" ,
"_acl" : {
"r_perm" : {
"users" : [ "aaa" , "bbb" , "ccc" ]
}
}
}一方、権限なしで要求すると、次のようになります。
GET /api/books/123
authorization: accessToken-ddd
返品:
404 Not found
オブジェクトにアクセスできるすべてのユーザーを指定するには、面倒でタイミングがあります。これは、グループが役立つ場所です。
POST /api/books
{
"title" : "Clean Code" ,
"subtitle" : "A Handbook of Agile Software Craftsmanship" ,
"_acl" : {
"r_perm" : {
"groups" : [ "group-id-1" ]
}
}
}ご想像のとおり、このオブジェクトは、ユーザーオブジェクトのacl_groupsで指定されたgroup-id-1を持っているユーザーがアクセスできるようになりました。
user-id-1およびuser-id-2 group-id-1にない場合、これらのユーザーはこの方法で明示的にアクセスできます。
POST /api/books
{
"title" : "Clean Code" ,
"subtitle" : "A Handbook of Agile Software Craftsmanship" ,
"_acl" : {
"r_perm" : {
"groups" : [ "group-id-1" ] ,
"users" : [ "user-id-1" , "user-id-2" ]
}
}
}モデルにMixinをインストールしているが、新しいオブジェクトの作成に関する$aclを指定しない場合、オブジェクトの可視性は公開されます。
POST /api/books
{
"title" : "Clean Code" ,
"subtitle" : "A Handbook of Agile Software Craftsmanship"
}返品
{
"title" : "Clean Code" ,
"subtitle" : "A Handbook of Agile Software Craftsmanship" ,
"_acl" : {
"r_perm" : {
"groups" : [ "*" ] ,
"users" : [ "*" ]
} ,
"w_perm" : {
"groups" : [ "*" ] ,
"users" : [ "*" ]
}
}
} npm install --save loopback-object-acl
model-config.json add ../node_modules/loopback-object-aclからミキシンへ
"_meta" : {
"sources" : [
"loopback/common/models" ,
"loopback/server/models" ,
"../common/models" ,
"./models"
] ,
"mixins" : [
"loopback/common/mixins" ,
"loopback/server/mixins" ,
"../common/mixins" ,
"./mixins" ,
"../node_modules/loopback-object-acl"
]
} ObjectAclControllerオブジェクトレベルのACLで保護したいモデルを使用します。
book . json
{
"name" : "Book" ,
"base" : "PersistedModel" ,
"idInjection" : true ,
"options" : {
"validateUpsert" : true
} ,
"mixins" : {
"ObjectAclController" : { }
}
. . .
}このミックスインはoptionsオブジェクト上のcurrentUserオブジェクトを期待しています。これはデフォルトのループバックv3.x動作ではなく、使用前に実装する必要があります。
実装はここにあります:http://loopback.io//doc/en/lb3/using-current-context.html#use-us-custom-strong-remoting-phase
このミックスインは、 loopback v3.xでのみテストされ、 mongodbをDataSourceとして使用しています
バージョン2.0