Обязательный вход, закрытые разделы
        Приветствую.
Возможно, вопрос банальный, но несколько дней поиска не дали ответа.
С MODX работаю меньше недели, решил попробовать его, как замену Drupal.
Нужен пинок в нужную сторону, пока не могу разобраться в некоторых вещах.
Общая задача такая:
Спасибо.
    
    
                                                                                
            Возможно, вопрос банальный, но несколько дней поиска не дали ответа.
С MODX работаю меньше недели, решил попробовать его, как замену Drupal.
Нужен пинок в нужную сторону, пока не могу разобраться в некоторых вещах.
Общая задача такая:
- Сделать сайт с обязательным входом (заглушка с формой логина вместо сайта, до момента входа). Сейчас организован вход и регистрация компонентом Login, но как полностью закрыть сайт — не разобрался.
 - Каждому пользователю вручную админом назначаются «проекты», ресурсы которых он может видеть и создавать. В том числе тикеты (компонент Ticket), некоторым пользователям надо дать доступ ко всем проектам. Где почитать про систему контроля доступа? Очень сложно понять контексты, роли, группы пользователей, политики доступа. По отдельности — всё вроде ясно, но как они взаимодействуют — весь мозг сломал.
 
Спасибо.
Комментарии: 16
                1) По пунктам:
— При регистрации через Login нужно заносить пользователя в определенную группу (Users).
— Выставить группе анонимных пользователей права Load only на все контексты, где нужно запрашивать авторизацию
— Добавить в системной настройке unauthorized_page (403 ошибка) айди страницы с формой авторизации
После чего всех неавторизованных пользователей, при запросе на закрытую страницу, будет перебрасывать на страницу авторизации.
//Примечание: для альтернативы, если не нужна переадресация, можно создать простой сниппет (допустим, getAccess) и вызывать его на каждой странице.
Сниппет getAccess:
Пример:
Из минусов такого метода — поисковые системы проиндексируют кучу дублей одинаковых страниц с формой авторизации.
2. modstore.pro/packages/ecommerce/payandsee — может быть, это вам поможет? В противном случае — придется настраивать свои сниппеты, завязанные на extend-полях пользователя.
                    — При регистрации через Login нужно заносить пользователя в определенную группу (Users).
— Выставить группе анонимных пользователей права Load only на все контексты, где нужно запрашивать авторизацию
— Добавить в системной настройке unauthorized_page (403 ошибка) айди страницы с формой авторизации
После чего всех неавторизованных пользователей, при запросе на закрытую страницу, будет перебрасывать на страницу авторизации.
//Примечание: для альтернативы, если не нужна переадресация, можно создать простой сниппет (допустим, getAccess) и вызывать его на каждой странице.
Сниппет getAccess:
<?php
	$user = (!empty($userId)) ? $modx->getObject('modUser', $userId) : $modx->user;
	if (is_object($user) && $modx->user->isAuthenticated('web')) {
		return $content;
	}
	else {
		return $modx->getChunk('название_чанка');
	} — соответственно, нужно создать чанк с формой авторизации и обозначить для сниппета параметр &content, в котором будет храниться html-код. Пример:
<html>
	<head>
		[[$meta]]
	</head>
	<body>
		[[!getAccess? &content=`
			//ваш хтмл-код
		`]]
	</body>
</html>(как альтернатива, можно переписать строчку сниппета «return $content» на «return $modx->getChunk($content);» — в таком случае, при вызове в поле &content нужно будет указывать название чанка, который отобразится авторизованному пользователю).Из минусов такого метода — поисковые системы проиндексируют кучу дублей одинаковых страниц с формой авторизации.
2. modstore.pro/packages/ecommerce/payandsee — может быть, это вам поможет? В противном случае — придется настраивать свои сниппеты, завязанные на extend-полях пользователя.
                Вот здесь хорошо описано, как сделать страницы только для зарегистрированных пользователей.            
                    
                Простой плагин closeWebSite, вешаем на событие OnLoadWebDocument
В плагине цифра 8 — это id страницы входа, цифра 1 — id главной страницы.
                    В плагине цифра 8 — это id страницы входа, цифра 1 — id главной страницы.
<?php
$logged = $modx->user->hasSessionContext('web');
$isLoginPage = $modx->resource->get('id') == 8;
if($logged){
  if($isLoginPage){
    $url = $modx->makeUrl(1);
    $modx->sendRedirect($url);
  }
  return;
}
if(!$logged && !$isLoginPage) {
  $modx->sendForward(8);
}            
                То, что надо! Спасибо.            
                    
                А как требовать авторизацию на всех страницах, кроме одной? С id 30 например.            
                    
                Внимательно посмотреть на код в комментарии выше.            
                    
                МОжет пригодиться — шпаргалка по правам пользователя file.modx.pro/files/b/9/2/b9223a4ef907c00a07cca6fd1666dddd.pdf            
                    
                Перевод отличной заметки от Боба Рея про модель безопасности MODX.            
                    
                Not Found
The requested URL /blog/documentation/869.html was not found on this server.
                    The requested URL /blog/documentation/869.html was not found on this server.
                Умер давно тот сайт, придётся теперь гуглить самостоятельно.            
                    
                По-моему по данной ссылке объем статьи значительно ниже, чем в первоисточнике.            
                    
                goo.gl/P4CPLg
Тут повторяющиеся снимки одного т того же ресурса по датам. Это просто статья которая канула вместе с сайтом старого сообщества. Видимо в архиве по датам разные копии, отличающиеся комментариями. Объем я не сравнивал.
                    Тут повторяющиеся снимки одного т того же ресурса по датам. Это просто статья которая канула вместе с сайтом старого сообщества. Видимо в архиве по датам разные копии, отличающиеся комментариями. Объем я не сравнивал.
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.