2016-11-24 4 views
0

큰 API가 있으며 대부분의 작업에 편리하기 때문에 청사진을 사용하고 있습니다. 멀티 테넌트 응용 프로그램이므로 모든 요소에 groupID 필드가 있습니다.SailsJS. 요청중인 요소의 groupID가 사용자 그룹과 동일한 지 확인하는 일반 정책

편집/삭제하려는 요소가 사용자 그룹에 속하는지 확인하는 정책이 필요합니다. 요청시 사용자의 groupID가 이미 JWT 정책 에 의해 주입되었지만 ID에 적합한 모델을 확인하고 사용자 ID와 비교하는 일반 정책에 정책을 적용하려면 어떻게해야합니까? 해커가 자신의 JWT 토큰을 사용할 수 있고 groupID를 요청할 수 있지만 그의 요소에 액세스 할 수 없으므로 요청에서 groupID로 수행 할 수 없습니다. 가능합니까 아니면 모델별로 별도의 정책을 만들어야합니까?

답변

0

찾았습니다.

청사진을 사용하고있을 때 modelNamereq.options.model에서 얻을 수 있습니다.

불행히도 this[modelName]을 사용할 수 없습니다. 옵션으로 작은 문자로 시작하는 모델 이름을 부여하기 때문에 먼저 대문자의 첫 글자를 예를 들어와 같이 입력해야합니다. var modelName = req.options.model.charAt(0).toUpperCase() + req.options.model.slice(1);

그리고 당신은 내가 오직 자신의 그룹 요소를 사용자가 편집을 수 있도록 일반적인 정책을 사용 this[modelName].whateverYouNeed

자유롭게 사용할 수 있습니다.

var modelName = req.options.model.charAt(0).toUpperCase() + req.options.model.slice(1) 
    var elementID = null 

    if (req.params.id) { // To handle DELETE, PUT 
    elementID = req.params.id 
    } 
    if (req.body.id) { // To handle POST 
    elementID = req.body.id 
    } 

    this[modelName].findOne({ 
    id: elementID 
    }).exec(function(err, contextElement) { 
    if(err) { 
     return res.serverError(err) 
    } 
    if(contextElement.group=== req.user.group.id) { 
     sails.log('accessing own: ' + modelName) 
     return next() 
    } 
    else { 
     return res.forbidden('Tried to access not owned object') 
    } 
    })