2011-01-14 2 views

ответ

0

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

+0

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

+0

Благодарим вас за ответ. Но я хочу ограничить добавление определенной категории к статье. – dragoon

0

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

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

1

Я считаю, что вы могли проверить, была ли категория добавлена ​​на страницу в крюке ArticleSave и выдать сообщение об ошибке, если у пользователя нет необходимого разрешения.

Edit: Что-то вдоль этих линий (быстрый & загрязнен):

$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; 
} 
Смежные вопросы