2017-02-10 16 views
1

Я использую loopback для создания простого API для сайта SPA. Я хочу, чтобы мои права как можно более простой, так что я в конечном итоге со следующей моделью ACLloopback ACL для модели пользователя

  • всех разрешения запрещены по умолчанию
  • некоторые методам в нескольких моделях разрешены для всех
  • всех методы разрешено для любого авторизованного пользователя

это, очевидно, будет работать, если я создам несколько пользователей, и никто больше не сможет создавать или изменять пользователей. Поскольку я не могу явно изменять разрешения для встроенной модели User, я создал модель admin, которая расширяет User. Затем я установил значение public модели User в значение false. Я установил следующие правила ACL

{ 
    "accessType": "*", 
    "principalType": "ROLE", 
    "principalId": "$everyone", 
    "permission": "DENY" 
}, 
{ 
    "accessType": "EXECUTE", 
    "principalType": "ROLE", 
    "principalId": "$everyone", 
    "permission": "ALLOW", 
    "property": "login" 
}, 
{ 
    "accessType": "*", 
    "principalType": "ROLE", 
    "principalId": "$authenticated", 
    "permission": "ALLOW" 
} 

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

К сожалению, это не так, как это работает, кто-либо еще может POST для пользователей и создавать новых пользователей. Я предполагаю, что правила ACL не применяются к унаследованной модели, поэтому здесь применяются правила для User. Поэтому я вернусь к квадрату, я не могу либо изменять разрешения User, либо переопределять их.

Какие у меня варианты? Невозможно ли предотвратить создание новых пользователей?

ответ

1

Как выяснилось, спецификация правила имеет значение больше, чем уровень наследования. В этом случае модель User определяет правило специально для свойства create. Это правило берет на себя более общее отрицание каждого свойства, хотя правило отказа было определено в расширенной модели admin. Поэтому мне пришлось принять все разрешенные правила от модели User и отказать им явно в admin.

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

  • Нет связанных вопросов^_^