2015-12-21 5 views
2

У нас есть решение, реализованное на основе этого article и this post. Теперь нам нужно усилить это решение. Вот пример использования.Доступ на основе разрешений на доступ к весне для api

Существуют различные разрешения, такие как CREATE_USER, CREATE_ORG и т. Д. Но на основе ролей пользователей нам необходимо применить определенные ограничения. Например, ROLE_ADMIN, а также ROLE_ORG_ADMIN могут создавать пользователи. Но ROLE_ORG_ADMIN может создавать только пользователь с некоторым специальным разрешением (или ROLE_ORG_ADMIN не должен быть в состоянии создать пользователь с ROLE_ADMIN правами)

  1. ROLE просто группа разрешений
  2. Пользователя связан с ролью и при входе в системе org.springframework.security.core.userdetails.User.authorities устанавливается с правами вместо ROLE

у нас есть приложение REST с проверкой подлинности на основе маркеров.

@RequestMapping(value = "/users", 
    method = RequestMethod.POST, 
    produces = MediaType.APPLICATION_JSON_VALUE) 
@Secured(AuthoritiesConstants.CREATE_USER) 
public ResponseEntity<?> createUser(@RequestBody ...) 

Теперь у нас есть интерфейс администратора, где мы контролируем эти ограничения из пользовательского интерфейса, в пользовательском интерфейсе для создания пользователя, которого мы не отображать ROLE_ADMIN в списке выбора для ROLE_ORG_ADMIN. Мы собираемся выставить api для третьей стороны. Мы не знаем, как это можно сделать на уровне api.

POST /api/users 
{ 
    "id": null, 
    "login": "name", 
    "firstName": "first", 
    "lastName": "Last", 
    "email": "[email protected]", 
    "activated": true, 
    "langKey": "en", 
    "createdBy": null, 
    "createdDate": null, 
    "lastModifiedBy": null, 
    "lastModifiedDate": null, 
    "resetDate": null, 
    "resetKey": null, 
    "authorities": [ 
    "ROLE_ORG_ADMIN", 
    "ROLE_ADMIN" 
    ] 
} 

То, что мы хотим сделать, это ограничить пользователю роль ROLE_ORG_ADMIN создания пользователей с ролью ROLE_ADMIN. И ROLE_ORG_ADMIN, и ROLE_ADMIN имеет разрешение CREATE_USER. Если текущая роль пользователя не равна ROLE_ADMIN, api должен ответить с отказом доступа при попытке создать пользователя с ролью ROLE_ADMIN. Пожалуйста помоги.

+0

@ willie-wheeler, так как вы являетесь автором статьи, упомянутой выше, просмотрите этот вопрос. – titogeo

ответ

0

Я хотел бы поделиться двумя способами справиться с этим, Вариант 1. Как вы публикуете доступные пользовательские_поля для пользователя при создании пользователя? Если вы показываете все роли пользователей и позволяете пользователю выбирать соответствующую роль, то при перечислении доступных пользовательских ролей вы можете не указывать ROLE_ADMIN, если зарегистрированный пользователь ROLE_ORG_ADMIN.

Вариант 2. Если вам не нравится обрабатывать его в пользовательском интерфейсе, то при создании ПОЛЬЗОВАТЕЛЯ на заднем конце вы можете с помощью исключения, если зарегистрированный пользователь ROLE_ORG_ADMIN пытается создать ПОЛЬЗОВАТЕЛЬ с ROLE_ADMIN. Вы можете получить доступ к зарегистрированным в пользовательских деталях с помощью основного объекта.

Надеюсь, что любой вариант может быть реализован.

+0

У меня нет проблем с обработкой этого в пользовательском интерфейсе. Я уже делаю то, что вы упомянули. Я пытаюсь выяснить, как контролировать, когда я выставляю API. Посмотрите, есть ли какой-либо встроенный весенний способ сделать это. – titogeo

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