2016-11-13 8 views
0

У меня есть модель под названием сотрудника и это свойствоПрименить ограничение доступа к свойствам внутри модели в шлейфе [Strongloop]

"name":"", 
"dob":"", 
"location":"" 

некоторые из ролей по умолчанию, которые находятся в рамках закольцованных являются

$authenticated 
$everyone 

Я хотел

1.Allow $authenticated ролей на доступ к модели сотрудник [READ and WRITE].

$everyone 2.Allow Роли только [READ] от свойств модели, кроме расположения собственности [местоположения разрешено только для чтения по ролям $ аутентифицированных]. ,

Я добавил конфигурацию ниже в employee.json, но не работал.

{ 
     "accessType": "READ", 
     "principalType": "ROLE", 
     "principalId": "$everyone", 
     "permission": "ALLOW" 
    }, 
    { 
     "accessType": "READ", 
     "principalType": "ROLE", 
     "principalId": "$everyone", 
     "permission": "DENY", 
     "property": "location" 
    } 

Искал много, Не удалось найти код.

ответ

0

Этот код будет работать под моим сценарием, но он не идеален. Это своего рода работа. Существуют методологии, называемые mixins, которые будут выполнять те задачи, которые я предполагаю. Поскольку мой вопрос не ответил, я даю решение.

Employee.afterRemote('**', function(ctx, result, next) { 
     if(ctx.result) { 
      if(Array.isArray(ctx.result)) { 
       ctx.result.forEach(function (result) { 
       var is_logged_in = ctx.req.accessToken; 
       if(is_logged_in == null){ 
        console.log('1'); 
        result.unsetAttribute('location') 
       } 
       }); 
      } else { 
       ctx.result.unsetAttribute('location') 
      } 
      } 

      next(); 
    }); 
0

То, что я думаю, что вы можете сделать для вопроса 1) в вашем employee.json:

... 
"acls": [ 
    { 
     "accessType": "*", 
     "principalType": "ROLE", 
     "principalId": "$everyone", 
     "permission": "DENY" 
    }, 
    { 
     "accessType": "READ", 
     "principalType": "ROLE", 
     "principalId": "$authenticated", 
     "permission": "ALLOW" 
    }, 
    { 
     "accessType": "WRITE", 
     "principalType": "ROLE", 
     "principalId": "$authenticated", 
     "permission": "ALLOW" 
    } 
    ] 
… 

По вопросу № 2) - Я думаю, что это не возможно в LoopbackJS на самом деле (не уверен).

Атрибут property предназначен для доступа к пользовательским методам (именам remoteMethods), которые вы определяете в своем файле - не для атрибутов модели.