新闻记录后台访问权限
Backend access rights for news records
是否可以将新闻扩展(ext:news
)的所有记录存储在同一个存储页面上,但只显示由登录后端用户创建的记录?
所以当前后台用户只能查看和编辑自己的记录?管理员当然应该看到所有记录。
不,这是不可能的,因为 TYPO3 中没有实现记录级别的后端用户权限。
所以你要么必须将用户的新闻记录分开放在单独的系统文件夹中,要么你可以尝试使用挂钩(例如 $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/class.db_list_extra.inc']['getTable']
)或 XClass 来根据你的需要自定义 TYPO3 后端。我不推荐后者,因为TYPO3后端权限系统很复杂,你需要确保限制TYPO3几个部分的记录访问(例如记录列表,元素浏览器,相关新闻字段,...)
有两种归档方式:
- 如果后台用户不是太多。您可以只创建一个页面(类型
是文件夹)以后端用户名命名。并在后端用户中
模块你可以设置权限(不是针对组用户,而是针对
仅限单个后端用户)。
- 如果后端用户太多。并且您只想为该组设置权限,所有后端用户都共享相同的规则。可以参考Hook:https://docs.typo3.org/p/georgringer/news/main/en-us/Tutorials/ExtendNews/Hooks/Index.html 这样基本的逻辑是这样的:
2.1 获取当前 logged-in 用户组。
2.2 如果群组是Reporter,我们可以使用listing页面的hook:
$constraints[] = $query->equals('cruser_id', $be_id);
编辑(2022 年 3 月 3 日):
嗨,克里斯,是的,你是对的。
今天,我有机会深入了解新闻扩展。我想我们还是可以成功的
- 在你的 ext_localconf.php
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS'][\TYPO3\CMS\Recordlist\RecordList\DatabaseRecordList::class]['modifyQuery'][$_EXTKEY]
= \T3docs\SitePackage\Hooks\DatabaseRecordListHook::class;
(请确保命名空间正确)
- 在文件中:T3docs\SitePackage\Hooks\DatabaseRecordListHook。创建一个名为 modifyQuery 的函数:
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;
}
- 在用户选项选项卡中设置 Tsconfg : options.be_users = 3,100
(3,100 是 be_user id。并且会显示 2 两个后端用户的消息)
因此,它对我有用。
是否可以将新闻扩展(ext:news
)的所有记录存储在同一个存储页面上,但只显示由登录后端用户创建的记录?
所以当前后台用户只能查看和编辑自己的记录?管理员当然应该看到所有记录。
不,这是不可能的,因为 TYPO3 中没有实现记录级别的后端用户权限。
所以你要么必须将用户的新闻记录分开放在单独的系统文件夹中,要么你可以尝试使用挂钩(例如 $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/class.db_list_extra.inc']['getTable']
)或 XClass 来根据你的需要自定义 TYPO3 后端。我不推荐后者,因为TYPO3后端权限系统很复杂,你需要确保限制TYPO3几个部分的记录访问(例如记录列表,元素浏览器,相关新闻字段,...)
有两种归档方式:
- 如果后台用户不是太多。您可以只创建一个页面(类型 是文件夹)以后端用户名命名。并在后端用户中 模块你可以设置权限(不是针对组用户,而是针对 仅限单个后端用户)。
- 如果后端用户太多。并且您只想为该组设置权限,所有后端用户都共享相同的规则。可以参考Hook:https://docs.typo3.org/p/georgringer/news/main/en-us/Tutorials/ExtendNews/Hooks/Index.html 这样基本的逻辑是这样的:
2.1 获取当前 logged-in 用户组。
2.2 如果群组是Reporter,我们可以使用listing页面的hook:
$constraints[] = $query->equals('cruser_id', $be_id);
编辑(2022 年 3 月 3 日):
嗨,克里斯,是的,你是对的。 今天,我有机会深入了解新闻扩展。我想我们还是可以成功的
- 在你的 ext_localconf.php
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS'][\TYPO3\CMS\Recordlist\RecordList\DatabaseRecordList::class]['modifyQuery'][$_EXTKEY]
= \T3docs\SitePackage\Hooks\DatabaseRecordListHook::class;
(请确保命名空间正确)
- 在文件中:T3docs\SitePackage\Hooks\DatabaseRecordListHook。创建一个名为 modifyQuery 的函数:
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;
}
- 在用户选项选项卡中设置 Tsconfg : options.be_users = 3,100
(3,100 是 be_user id。并且会显示 2 两个后端用户的消息)
因此,它对我有用。