2011-01-14 3 views

Répondre

0

Il est peut-être un peu plus haut pour ce que vous voulez, mais je pense que vous pouvez utiliser SimpleSecurity pour cela, mais il peut aussi assurer que les gens sans l'autorisation ne peut pas vue la catégorie non plus.

+0

SimpleSecurity vous permettra de faire en sorte que certaines personnes peuvent modifier certaines catégories, mais je ne pense pas que ce soit ce qu'ils vouloir faire. –

+0

Merci pour votre réponse. Mais ce que je veux faire est de restreindre l'ajout d'une catégorie spécifique à un article. – dragoon

0

Peu probable, puisque l'ajout d'une catégorie est aussi simple que l'ajout de texte, ce n'est pas une action qui peut être restreinte avec l'installation par défaut, ou une extension que je pourrais trouver.

Je suppose que l'on pourrait écrire et extension qui supprimerait le texte si vous n'avez pas la permission d'ajouter cette catégorie.

1

Je crois que vous pourriez vérifier si la catégorie a été ajoutée à la page dans le crochet ArticleSave et émettre une erreur si l'utilisateur n'a pas l'autorisation requise.

Edit: Quelque chose le long de ces lignes (rapide & sale):

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