Предоставление доступа к данным в WSO2 API Manager

Используя функциональные возможности области в диспетчере API WSO2, я могу ограничить доступ к моим внутренним API, таким как http://mydomain/context/students(GET - список всех учащихся), http://mydomain/context/student/S101 (GET — сведения об учащемся S101) или http://mydomain/context/student/create (POST) только для пользователей, которым назначены определенные роли. Такой детальный контроль я могу реализовать.

Но я хочу реализовать более подробную фильтрацию: пользователю U101 разрешено просматривать сведения только о студентах с S101 по S110. Поэтому http://mydomain/context/student/S111 должен быть заблокирован для него и http://mydomain/context/students должен возвращать сведения только от S101 до S110. Могу ли я реализовать эту фильтрацию в диспетчере API WSO2? (У меня есть таблица РСУБД (часть серверной части, не в WSO2) с сопоставлением пользователей со списком студентов, чьи данные разрешены пользователю.)


person Sreehari S    schedule 26.02.2018    source источник


Ответы (1)


В диспетчере API любые изменения содержимого ответа выполняются с помощью сценариев посредничества. В вашем сценарии сопоставление роли и содержимого должно храниться в диспетчере API для фильтрации содержимого. Для этого вы можете использовать посредник класса для фильтрации содержимого респонса.

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

Пожалуйста, следуйте документации [1] и [2], чтобы узнать, как написать посредник класса и как его использовать.

[1] https://docs.wso2.com/display/EI600/Class+Mediator

[2] https://docs.wso2.com/display/AM210/Adding+Mediation+Extensions

person menaka_    schedule 26.02.2018
comment
Большое спасибо за ответ. Вы сказали, что у вас есть одно сомнение. В вашем сценарии сопоставление роли и контента должно храниться в диспетчере API, чтобы фильтровать контент в первом параграфе, а затем вы можете либо определить его в самом классе, либо получить его из своей базы данных. во втором абз. ---- Тут я немного запутался. Должен ли я хранить сопоставление в диспетчере API? Упростит ли это мою настройку фильтрации по сравнению с ее хранением в БД, а не в диспетчере API? - person Sreehari S; 26.02.2018
comment
Я очень извиняюсь за путаницу. Позвольте мне внести ясность. Вы можете сохранить его как ресурс реестра APIM (в диспетчере API), жестко закодировать в посреднике вашего класса или сохранить в базе данных. В посреднике класса вы можете реализовать метод поиска на основе этого. IMO, поскольку у вас уже есть сопоставление в вашей базе данных, лучший способ - вызвать вашу базу данных из посредника класса. Таким образом, вы не хотите копировать его. - person menaka_; 26.02.2018
comment
ok.thanks еще раз... Я попытаюсь реализовать так, как вы предложили. Кстати, не могли бы вы подсказать, легче ли реализуется функция, которую я ищу, в любом другом продукте WSO2, который я могу использовать вместо apim? (Например, AFIK, WSO2 IS также можно использовать для аутентификации и авторизации API. Поддерживает ли он такую ​​функцию «из коробки»?) - person Sreehari S; 26.02.2018