Loopback은 전체 모델 또는 Mehods에 대한 액세스를 제한하기 위해 훌륭한 "클래스 레벨"ACL을 제공하지만 개별 객체에 대한 액세스를 제한 할 수있는 기능은 크게 부족합니다. 이 프로젝트는 각 객체에서 객체 수준 ACL을 설정하여이를 해결하려고 시도하고 Loopback의 쿼리를 조작하여 요청하는 사용자가 액세스 할 수있는 객체 만 반환합니다.
circleci :
3 명의 사용자 (id : "aaa", id : "bbb"및 id : "ccc")가 책을 읽을 수 있기를 원한다고 가정 해 봅시다.
POST /api/books
{
"title" : "Clean Code" ,
"subtitle" : "A Handbook of Agile Software Craftsmanship" ,
"_acl" : {
"r_perm" : {
"users" : [ "aaa" , "bbb" , "ccc" ]
}
}
}Mixin은 Mongo에서와 같이 저장 될 객체를 구문 분석합니다.
{
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를 가진 사용자 만 액세스 할 수 있으며 다른 사람은 없습니다. 검색 할 때 Mixin은 물체의 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 에 mixins
"_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" : { }
}
. . .
} 이 mixins는 options 객체에서 currentUser 객체를 기대합니다. 이것은 기본 루프백 v3.x 동작이 아니며 사용하기 전에 구현해야합니다.
구현은 여기에서 찾을 수 있습니다 : http://loopback.io//doc/en/lb3/using-current-context.html#use-acustom-strong-remoting-chease
이 믹스 인
버전 2.0