2016-02-11 3 views
1

Я успешно добавлен «Класс» -уровень ACL,, чтобы только авторизованные пользователи получают доступ мою модель:Loopback - Набор ACL на уровне объектов

.../server/ModelObj.js 

"acls": [ 
    { 
    "accessType": "*", 
    "principalType": "ROLE", 
    "principalId": "$unauthenticated", 
    "permission": "DENY" 
    } 
] 

Это замечательно, но мои приложения нуждается в ACL, на еще ниже уровень - уровень объекта.

Когда пользователь, принадлежащий Роли, создает новый объект, объект должен быть доступен только другим пользователям, которые имеют ту же роль.

Разве это способ обойти проблему в Loopback, или они предоставляют другой способ?

Заранее благодарен, Jesper.

ответ

0

Я думаю, вам, возможно, придется реализовать это, используя обычай role resolver. Идея заключается в создании роли и настраиваемого распознавателя и определении доступа пользователя к данной модели во время выполнения. Вот частичный пример (обратите внимание, что вам нужно будет создать роль, а также члены и т. Д.).

// perhaps in a boot script? 
app.models.Role.registerResolver('teamMember', function(role, context, cb) { 
    if (context.modelName === 'ModelObj') { 
    context.model.findById(context.modelId, function(err, instance) { 
     if (err) { /* handle it... */ return cb(err); } 
     // check the instance for something to determine access 
     // execute callback with switch for access (or not) 
     cb(null, true); 
    } 
    } 
}); 
+0

Благодарим вас за предложение - я действительно реализовал свое собственное решение таким образом. Он работает, но я считаю его очень ручным процессом для достижения чего-то довольно общего для большинства приложений. Оцените подтверждение в моей проблеме и решении от вас, хотя :) –

+0

У вас есть простое решение для широкого применения этого функционального приложения? Прямо сейчас это работает, если вы запрашиваете определенный объект в db, но если вы запрашиваете все объекты, это не будет установлено. Не забывайте, обновляйте и т. Д. –

+0

Я полагаю, вы могли бы использовать для этого крюк операции доступа. – jakerella

0

На этой неделе я начал loopback mixin поддерживать добавления на уровне объекта. Нам нужны динамические acls на уровне экземпляра, которые со временем могут меняться. Мы увидели ваш вопрос и провели поиск, чтобы найти плагин/mixin/middleware, который можно было бы сделать для поддержки этого, но мы ничего не нашли.

Если вы все еще заинтересованы в этом, я буду очень рад получить ваши отзывы, так как я хочу, чтобы этот mixin работал в любом месте и не только на нашем продукте.

Мой план состоит в том, чтобы иметь первую версию на этой неделе. С понедельника я создал простую синхронную библиотеку acl на уровне объекта. Позже я добавил поддержку как loopback-mixin и поддержку для решений, которые могли бы получить данные для принятия решения. Я хочу добавить поддержку для создания слоя «sugar», где простое свойство может создавать acls. Поэтому, если у вас есть модель с «запасом», никто не может назвать метод «покупать», если акции меньше 1.

Спасибо!

+0

Да, я с удовольствием хотел бы обсудить ваш подход! В настоящее время мы разрабатываем специальное решение для производства, и результаты являются многообещающими. Как я могу связаться с вами? –

+0

Привет, у меня есть открытое исходное решение для решения этой проблемы: https://github.com/jesperbruunhansen/loopback-object-acl. Любая обратная связь или помощь приветствуются! –

Смежные вопросы