Защитите назначение категории в MediaWiki - PullRequest
1 голос
/ 14 января 2011

Можно ли защитить определенную категорию, чтобы, например, категория «категория1» не могла быть присвоена статье без определенного разрешения?

Ответы [ 3 ]

1 голос
/ 14 января 2011

Я полагаю, что вы можете проверить, была ли категория добавлена ​​на страницу в хуке 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;
}
0 голосов
/ 14 января 2011

Маловероятно, поскольку добавление категории так же просто, как добавление некоторого текста, это не действие, которое может быть ограничено установкой по умолчанию или расширением, которое я мог найти.

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

0 голосов
/ 14 января 2011

Это может быть немного слишком для того, что вы хотите, но я думаю, что вы можете использовать SimpleSecurity для этого, но это также может гарантировать, что люди без разрешения не могут просматривать категорию.

...