【发布时间】:2019-07-08 09:03:08
【问题描述】:
是否可以在同一存储页面上存储新闻扩展 (ext:news) 的所有记录,但只显示由登录的后端用户创建的记录?
所以当前后端用户只能查看和编辑他自己的记录?管理员当然应该查看所有记录。
【问题讨论】:
是否可以在同一存储页面上存储新闻扩展 (ext:news) 的所有记录,但只显示由登录的后端用户创建的记录?
所以当前后端用户只能查看和编辑他自己的记录?管理员当然应该查看所有记录。
【问题讨论】:
不,这是不可能的,因为 TYPO3 中没有实现记录级别的后端用户权限。
因此,您要么必须将用户的新闻记录分隔在单独的 sysfolders 中,要么可以尝试使用挂钩(例如 $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/class.db_list_extra.inc']['getTable'])或 XClass 来自定义 TYPO3 后端以满足您的需求。我不推荐后者,因为 TYPO3 后端权限系统很复杂,您需要确保在 TYPO3 的几个部分(例如记录列表、元素浏览器、相关新闻字段......)中限制记录访问。
【讨论】:
有两种存档方式:
$constraints[] = $query->equals('cruser_id', $be_id);
编辑(2022 年 3 月 3 日):
嗨,克里斯,是的,你是对的。 今天,我有机会深入研究新闻扩展。我认为我们仍然可以成功
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS'][\TYPO3\CMS\Recordlist\RecordList\DatabaseRecordList::class]['modifyQuery'][$_EXTKEY]
= \T3docs\SitePackage\Hooks\DatabaseRecordListHook::class;
(请确保命名空间正确)
public function modifyQuery($parameters,
$table,
$pageId,
$additionalConstraints,
$fields,
$queryBuilder)
{
if ($table === 'tx_news_domain_model_news') {
$tsconfig = $GLOBALS['BE_USER']->getTSConfig();
if (!empty($tsconfig['options.']['be_users'])) {
$be_users = $tsconfig['options.']['be_users'];
$queryBuilder->andWhere('cruser_id IN (' . $be_users . ')');
}
}
return $queryBuilder;
}
因此,它对我有用。
【讨论】: