2016-09-24 2 views
0

나머지 API에 대한 액세스 제어를 설정하려고합니다. 루프백은 사용자/역할/주체를 기반으로 액세스를 처리하기위한 훌륭한 출발점을 제공합니다.루프백 ACL 모델/테이블 사용 방법은 무엇입니까?

하지만 제공 할 것보다 더 원하는 것이 있다면 어떻게해야합니까? 모델 인스턴스의 여러 소유자? ACL 테이블에 항목을 추가하는 것으로 충분합니까? 또는 새로운 역할/리졸버를 작성해야합니까? 그렇다면 기존 ACL 모델/테이블을 재사용 할 수 있습니까?

루프백은 훌륭하지만 문서가 부족하여 소스 코드를 읽지 못하게됩니다.

답변

1

이 특별한 경우에는 사용자 지정 역할 해결자를 만드는 것이 좋습니다. 이 같은

뭔가 :

Role.registerResolver('$inOwners', function (role, ctx, callback) { 
    ctx.model.count({ 
    id: ctx.modelId, 

    // This only works for mongo db... 
    owners: ctx.accessToken.userId 
    }, function(err, count) { 
    if (err) { 
     callback(err); 
    } else if (count) { 
     callback(); 
    } else { 
     callback(new Error('Not Owner')); 
    } 
    }); 
}); 

그리고 당신이 (어느 모델 정적의 ACL에, JSON 파일에서, 또는 ACL 테이블에 추가) 대한 ACL이를 추가 할 수 있습니다 :

{ 
    "accessType": "*", 
    "principalType": "ROLE", 
    "principalId": "$inOwners", 
    "permission": "ALLOW", 
    "property": "*", 
    "model": "*" 
} 

루프백 방법에 대한 액세스가 문서/행 내부의 내용에 따라 달라질 때마다 역할 해결 자만을 사용하여 ACL을 정의 할 수 있습니다. 그렇지 않으면 고유 한 ACL 시스템을 만들어야합니다.

+0

감사합니다. :). ACL 테이블이 기본적으로 모델 json 파일에 지정된 것의 "단지"지속성이므로이 점을 이해하고 있습니까? 이 예제에서는 개체 소유자가 포함될 모델의 필드를 사용합니다. 더 많은 제어가 필요한 경우 (예 : 소유자, 편집자, 개별 인스턴스의 시청자가 있으면이 인스턴스는 새로운 "instance_acl"테이블에 포함될 것입니까? –

+0

예. 동적 테이블에 ACL 테이블을 사용하면 (예를 들어, 관리자가 다른 사용자의 권한을 관리 할 수 ​​있습니다.) 모델 json 파일에있는 테이블은 정적 요소 일뿐입니다. 더 많은 제어를 위해보다 구체적인 acl 항목을 만들거나 역할 분석기에 더 많은 논리를 추가 할 수 있습니다. –