Во-первых, у пользователя может быть несколько ролей одновременно, и у роли есть область действия. Например, у одного пользователя есть три роли: /scopeA/editor, /scopeA/programmer, /scopeB/editor.
и /scopeA/editor имеет доступ к ресурсу /scopeA/post /scopeA/programmer имеет доступ к ресурсу /scopeA/bug
/scopeB/editor has access to resource /scopeB/post
поэтому возникает вопрос:
как я могу объявить политику, говорящую: если в наборе ролей есть роль с именем «/XX/editor», то соответствующий пользователь имеет доступ к «/YY/post», когда «XX == YY»
Я нашел аналогичный вопрос здесь, и Я предложил способ решения проблемы, но когда речь идет о множественной роли (значение атрибута роли — мешок), мой ответ неверен. Поскольку значение атрибута роли представляет собой сумку, я не могу просто получить часть между первыми двумя косыми чертами значения атрибута роли и сравнить с атрибутом ресурса,
затем я попытался найти для этого функцию сумки более высокого порядка, функция "urn:oasis:names:tc:xacml:3.0:function:any-of" может это сделать, но как насчет первого "аргумента функции" функция any-of?
вот что я делаю: первый аргумент функции any-of равен "string-equal", а второй аргумент - это функция, используемая для получения части между первыми двумя косыми чертами идентификатора ресурса, третий аргумент - это значение атрибута предмета, который является сумкой.
так что все, что мне нужно сделать, это определить функцию, чтобы получить часть между первыми двумя косыми чертами, верно?
есть ли лучший способ сделать то, что я хочу? если что-то неясно, пожалуйста, дайте мне знать, спасибо~~