2015-10-14 3 views
1

Я создал модель с именем «ShippingAddresses», которая имеет следующие правила ACL.Нужна помощь Понимание ACL в Loopback

[ 
    { 
     "accessType": "*", 
     "principalType": "ROLE", 
     "principalId": "$everyone", 
     "permission": "DENY" 
    }, 
    { 
     "accessType": "READ", 
     "principalType": "ROLE", 
     "principalId": "$owner", 
     "permission": "ALLOW" 
    }, 
    { 
     "accessType": "EXECUTE", 
     "principalType": "ROLE", 
     "principalId": "$authenticated", 
     "permission": "ALLOW", 
     "property": "create" 
    }, 
    { 
     "accessType": "WRITE", 
     "principalType": "ROLE", 
     "principalId": "$owner", 
     "permission": "ALLOW" 
    } 
    ] 

Когда я создаю запись, сделав вызов POST на конечной точке/API/shipping_addresses он отлично работает, но когда я делаю запрос GET на той же конечной точки/API/shipping_addresses это не работает.

Кроме того, для примечания стороны, у меня есть отношение модели ShippingAddresses, определенное с помощью Учетной записи (наследует пользователя). Отношение: Пользователь -> hasMany ShippingAddress, ShippingAddress -> принадлежит учетной записи.

Я прочитал документацию ACL о Loopback Официальные документы, но я потерян. Кажется, все правильно настроено, но все равно получается 401: Требуется авторизация.

ответ

2

Проблема заключается в READ разрешение при настройке $ владелец только. Это означает: только владелец экземпляра модели может просмотреть этот экземпляр. Следовательно, он будет работать только в том случае, если вы передадите id для экземпляра, связанного с владельцем (пользователем), i.e, таким же, как findById().

Также имейте в виду, что при работе с владельцем экземпляра модели вы должны связать их с 'belongsTo'. Он должен добавить userId в экземпляр модели, так что loopback знает, к кому принадлежит экземпляр модели. Кроме того, он также создает новые конечные точки отдыха. Для например:

User.modelname.create() //this way modelname instance is created for User. 
         //User is the owner of current modelname instance. 

В противном случае, если вы хотите, чтобы дать возможность каждому получить доступ к GET отдыха конечных точек, использовать следующие ACL.

[ 
    { 
     "accessType": "*", 
     "principalType": "ROLE", 
     "principalId": "$everyone", 
     "permission": "DENY" 
    }, 
    { 
     "accessType": "READ", 
     "principalType": "ROLE", 
     "principalId": "$everyone", 
     "permission": "ALLOW" 
    }, 
    { 
     "accessType": "EXECUTE", 
     "principalType": "ROLE", 
     "principalId": "$authenticated", 
     "permission": "ALLOW", 
     "property": "create" 
    }, 
    { 
     "accessType": "WRITE", 
     "principalType": "ROLE", 
     "principalId": "$owner", 
     "permission": "ALLOW" 
    } 
    ] 
0

ACL является одной из особенностей петлевой системы. по сравнению с другой структурой, полезной для разработки nodejs. Увидеть, что ваша проблема будет правильно создана для модели, будет изменение роли. первых вы ссылаетесь к аутентификации и authrotation из шлейфа

будет добавлением кодирования для моделей/script.js https://github.com/strongloop/loopback-example-access-control/blob/master/common/models/project.js

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