[switchUser] Версия 1.3.2
И вот вышла очередная версия switchUser, на этот раз, думаю, она уже стабильная, ибо пофиксил практически все, что можно. По традиции, опишу основные проблемные моменты и как с ними боролся.
В данном случае самая проблема возникла с компонентом Office. Это на самом деле очень ожидалось, как и в случае с Login и т.п. И это не проблема самих компонентов, а историческая неоднозначность самого MODX-а. Дело в том, что в MODX есть два наиболее часто используемых метода по политикам:
1. $modx->hasPermission() (Он же $modx->context->checkPolicy()) — проверка прав на контекст.
2. $modx->user->isAuthenticated() — проверка авторизованности пользователя в контексте (по умолчанию в web).
Прикол в том, что $modx->hasPermission() не проверяем авторизацию пользователя в данном контексте. Этот метод просто проверяет права пользователя, и не только не важно авторизован пользователь в этом контексте или нет, но и не важно авторизован ли пользователь вообще (то есть это может быть даже просто аноним). У пользователя или есть запрошенные права, или нету. И вот получается, что пользователь есть, и у него есть права, но компоненты, проверяющие пользователя методом $modx->user->isAuthenticated() просто не видят его в текущем контексте, из-за чего и получается путаница.
Читать далее, [switchUser] Версия 1.3.2
В данном случае самая проблема возникла с компонентом Office. Это на самом деле очень ожидалось, как и в случае с Login и т.п. И это не проблема самих компонентов, а историческая неоднозначность самого MODX-а. Дело в том, что в MODX есть два наиболее часто используемых метода по политикам:
1. $modx->hasPermission() (Он же $modx->context->checkPolicy()) — проверка прав на контекст.
2. $modx->user->isAuthenticated() — проверка авторизованности пользователя в контексте (по умолчанию в web).
Прикол в том, что $modx->hasPermission() не проверяем авторизацию пользователя в данном контексте. Этот метод просто проверяет права пользователя, и не только не важно авторизован пользователь в этом контексте или нет, но и не важно авторизован ли пользователь вообще (то есть это может быть даже просто аноним). У пользователя или есть запрошенные права, или нету. И вот получается, что пользователь есть, и у него есть права, но компоненты, проверяющие пользователя методом $modx->user->isAuthenticated() просто не видят его в текущем контексте, из-за чего и получается путаница.