Как сделать так, чтобы авторизованный пользователь видел только свои материалы и не видел материалы других пользователей, в пределах какой-то определенной категории. Сами материалы для пользователей будут создаваться в админ части и автором материала будет задавться определенный пользователь. В списке материалов будут выводиться только материалы пользователя и соответственно не будет выводиться содержание материала при его открытии, вместо содержимого будет сообщение о том, что нужно сначала зарегистрироваться.
Для решения этого к сожалению используется небольшой хак (то есть при обновлении joomla это изменение может быть затерто).
В файле administrator/components/com_contentaccess.xml добавляем строку:
<action name="core.show.other" title="JACTION_SHOWOTHER" description="COM_CONTENT_ACCESS_SHOWOTHER_DESC" />
в три секции component, category, article
Это и есть тот хак, который может быть затерт при обновлении Joomla.
В настройках прав для компонента разрешим авторизованным пользователям смотреть чужие материалы.

Создем категорию, в которой будут лежать материалы для авторизованных пользователей.
И в правах этой категории делаем запрет.

Потом создаем пункт меню, например, Список материалов категории. И в соответствующие файлы шаблона компонента материалов добавляем такой код:
В файл components/com_content/models/articles.php перед
// Filter by start and end dates. $nullDate = $db->Quote($db->getNullDate());
добавляем код:
$app = JFactory::getApplication();
$action = 'core.show.other';
$jinput = $app->input;
$assetName = 'com_content.category.' . (int) $categoryId;
$allowShowOther = $user->authorise($action, $assetName);
if ((!$allowShowOther && $user->id)){
$query->where("created_by = $user->id");
}
В файл для вывода материала templates/имяшаблона/html/com_content/articledefault.php добавляем после
// Create shortcuts to some parameters.
$params = $this->item->params;
$images = json_decode($this->item->images);
$urls = json_decode($this->item->urls);
$canEdit = $this->item->params->get('access-edit');
$user = JFactory::getUser();
такой код:
<?php
$action = 'core.show.other';
$assetName = 'com_content.article.' . (int) $this->item->id;
$allowShowOther = $user->authorise($action, $assetName);
if ((!$allowShowOther && $user->id) && ($user->id != $this->item->created_by)){
JError::raiseNotice( '403', 'File access denied!' );
return;
}
//echo ($allowShowOther ? 1 : 0);
?>