2011-01-14 27 views

Antwort

0

Es könnte ein wenig übertrieben für das, was Sie wollen, aber ich glaube, Sie SimpleSecurity dafür verwenden können, aber es könnte auch Menschen ohne Erlaubnis gewährleisten können die Kategorie entweder nicht Ansicht.

+0

SimpleSecurity Ihnen erlauben würde, es so nur bestimmte Leute bestimmte Kategorien bearbeiten können zu machen, aber ich glaube nicht, das ist, was sie möchte tun. –

+0

Vielen Dank für Ihre Antwort. Aber ich möchte das Hinzufügen bestimmter Kategorien zu einem Artikel einschränken. – dragoon

0

Unwahrscheinlich, da das Hinzufügen einer Kategorie so einfach ist wie das Hinzufügen von Text, ist dies keine Aktion, die mit der Standardinstallation eingeschränkt werden kann, oder eine Erweiterung, die ich finden kann.

Ich denke, man könnte schreiben und Erweiterung, die den Text entfernen würde, wenn Sie keine Berechtigung zum Hinzufügen dieser Kategorie haben.

1

Ich glaube, Sie könnten überprüfen, ob die Kategorie der Seite in der ArticleSave Hook hinzugefügt wurde und einen Fehler ausgeben, wenn der Benutzer nicht die erforderliche Berechtigung hat.

Edit: Etwas in dieser Richtung (quick & schmutzig):

$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; 
}