是否可以保护特定类别,例如未经特定许可,不能将“category1”类别分配给文章?
答案 0 :(得分:1)
我相信您可以检查该类别是否已添加到ArticleSave
挂钩中的页面,并在用户没有所需权限时发出错误。
编辑:这些内容(快速和肮脏):
$wgForbiddenCats = array( 'Forbidden' => 'sysop' );
$wgHooks['ArticleSave'][] = 'checkForbiddenCats';
function checkForbiddenCats( $article, $user, $text, $summary, $minor,
$_, $_, $flags, $status )
{
global $wgForbiddenCats, $wgParser;
// Firstly, get categories in the new text
$parser_output = $wgParser->parse( $text, $article->getTitle(),
$article->getParserOptions() );
$new_cats = array_keys( $parser_output->getCategories() );
// For now, the only added categories are the ones in the submitted text
$added_cats = $new_cats;
// If the page already exists, it can have some categories already
if( !( $flags & EDIT_NEW ) ) {
$dbr = wfGetDB( DB_SLAVE );
$query_result = $dbr->select(
'categorylinks',
'cl_to',
array( 'cl_from' => $article->getID() ) );
$old_cats = array();
while( $row = $query_result->fetchRow() )
$old_cats[] = $row[0];
$dbr->freeResult( $query_result );
$added_cats = array_diff( $new_cats, $old_cats );
}
$user_groups = $user->getGroups();
foreach( $wgForbiddenCats as $category => $group ) {
if( array_search( $category, $added_cats ) !== false &&
array_search( $group, $user_groups ) === false )
{
$status->fatal( 'forbidden-cat' );
return false;
}
}
return true;
}
答案 1 :(得分:0)
对于您想要的内容,它可能有点过分,但我认为您可以使用SimpleSecurity,但它也可以确保未经许可的用户也无法查看类别。
答案 2 :(得分:0)
不太可能,因为添加类别就像添加一些文本一样简单,这不是可以使用默认安装或我可以找到的扩展来限制的操作。
如果您没有添加该类别的权限,我想可以编写和扩展删除文本。