Для проверки прав доступа инициатора можно назвать session.checkPermission()
AEM Workflow: Получить сеанс инициатора для проверки разрешений
Однако com.day.cq.workflow.WorkflowSession.getSession()
возвращается всегда админы сессии, так что я не в состоянии проверить права доступа initator на данный узел.
Как я могу получить сеанс инициатора?
Update
Authorizable authorizable = userManager.getAuthorizable(initiator);
Credentials credentials = ((User) authorizable).getCredentials();
Session userSession = adminSession.impersonate(credentials);`
Броски:
javax.jcr.LoginException: Login Failure: all modules ignored
at org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl.login(RepositoryImpl.java:271)
at com.adobe.granite.repository.impl.CRX3RepositoryImpl.login(CRX3RepositoryImpl.java:92)
at org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl.login(RepositoryImpl.java:202)
at org.apache.jackrabbit.oak.jcr.session.SessionImpl.impersonate(SessionImpl.java:284)
Caused by: javax.security.auth.login.LoginException: Login Failure: all modules ignored
at javax.security.auth.login.LoginContext.invoke(LoginContext.java:906)
at javax.security.auth.login.LoginContext.access$000(LoginContext.java:195)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:682)
... 15 common frames omitted`
должен спросить - вы абсолютно уверены, что это не администратор, который инициировал рабочий процесс? Бэкэнд-сервисы могут, например, извлекать сеанс администратора и использовать его, помимо прочего, запускать рабочие процессы ... Не потому, что это правильно, а потому, что это «проще». – CptBartender
@CptBartender Да так 'workItem.getWorkflow(). GetInitiator()' дает другой пользователь, чем 'session.getUserID()' – Quantum
В этом случае, вы пытались с помощью 'session.impersonate (кредитки)' на вернулся сеанс администратора и посмотрел, можете ли вы получить сеанс пользователя? Согласно документации, это может быть возможно только с именем пользователя, хотя мне нужно было это сделать ... – CptBartender