Permissions

  • Auteur de la discussion Auteur de la discussion Truelle
  • Date de début Date de début

Truelle

Bucheron
4 Mars 2011
817
1
11
[size=xx-large]Permissions[/size]
Version actuelle : 2.5.4

Introduction
Permissions est un plugin qui s'installe du coté serveur. Il vous sera indispensable dans le sens où il vous permettra de gérer des permissions regroupées en groupes que vous pourrez assigner à vos utilisateurs comme le ferait Windows ou un forum pour la comparaison.
Un gros pourcentage de plugins s'appuient sur Permissions afin d'autoriser ou non une partie de leurs fonctionnalités.

Prérequis
Avoir un serveur CraftBukkit, avec la dernière version si possible (pour éviter les problèmes).
Evitez aussi d'avoir tout autre plugin similaire à Permissions qui pourrait entré en conflit avec celui-ci ou même faire en sorte que Permissions soit complètement ignoré. Je pense notamment à GroupManager ou EssentialsGroupManager (et EssentialsGroupBridge).
Notepad++. Pourquoi Notepad++ ? Vous le saurez au moment de la configuration du plugin.

Installation
  1. Commencez par télécharger les fichiers du plugin via ce lien.
  2. Une fois que vous avez l'archive ZIP, extrayez le tout à la racine de votre dossier plugins/ dans votre dossier de serveur.
    Si tout va bien, vous avez le fichier "Permissions.jar" et un dossier "Permissions" avec à l'interieur un fichier "RENAME-ME.yml".
C'est tout ? Oui, y'a pas plus simple. Mais ça c'était la partie facile, le plus dur est devant nous.

Configuration
Si ce n'est pas déja fait, installez Notepad++. Lancez-le, allez dans le menu Paramétrage > Préférences... > onglet Menu langage/Tabulations, à droite dans Tabulations choisissez "yaml" dans la liste, décochez "Valeur par défaut" et cochez "Insérer des espaces" en vous assurant que "Taille" vaut '4', puis fermer.

325947notepadyaml.png

Pourquoi faire cela ? Nous allons devoir editer un fichier de type Yaml (*.yml), un fichier particulier parce que toute son organisation se base sur l'indentation, donc si cela est mal respecté le fichier est invalide et donc le plugin Permissions ne fonctionnera jamais. Après ces quelques petits réglages, nous voilà enfin prêt à entrer dans le vif du sujet.

Sachez tout d'abord qu'il existe un fichier de configuration par monde, ainsi si votre monde s'appelle "World" alors votre fichier relatif à ce monde devra s'intituler "World.yml" et pas autrement. Dans le cas contraire, au démarrage du serveur, quand CraftBukkit chargera Permissions, il ne trouvera pas de configuration pour ce monde et le plugin deviendra inutile. C'est pour cela, dés maintenant, rendez vous dans le dossier plugins/Permissions/ et renommez desuite le fichier le fichier "RENAME-ME.yml" comme je viens de vous l'expliquer. Ensuite, ouvrez-le avec Notepad++.
Parlons un peu de la structure de ce document. 3 arborescences sont présentes : plugin, users et groups. Globalement, nous pourrons soit écrire une seule instruction, soit une liste d'instructions. Voici deux exemples :

Code:
default: true

Ici, après "default:" nous avons le choix entre deux valeurs, soit "true" ou soit "false". Soit l'un soit l'autre, pas les deux à la fois.

Code:
permissions:
    - 'foo.bar'
    - 'toto.manger'
    - 'toto.dormir'

Il s'agit ici d'énumerer une liste de permissions, sous la forme "- 'ma_permission'" sur chaque ligne. Il y a d'autre façons de l'écrire mais pour l'instant nous restons sur ce format.

Biensur, une option (dans les exemples "default:" ou "permissions:") peut ne comporter aucune valeur, alors il suffit de ne rien écrire.
Tout ce qui est coloré en vert et précédé d'un '#' sont des commentaires, des notes pour vous et qui ne seront par interpreté lors de la lecture du fichier. Vous pouvez supprimer les commentaires de base pour un peu plus de lisibilité.
Bref, je ne vais pas m'eterneliser sur ce sujet, passons aux choses sérieuses. Commençons par le début.

Code:
plugin:
    permissions:
        system: default
        copies:

Ne pas y toucher, sauf "Copies:" si votre serveur est multi-mondes. En effet, comme expliqué précédemment vous pouvez avoir plusieurs fichiers pour chacun de vos mondes, ou indiquer ici le nom de vos autres mondes qui auront cette configuration.

Groups
Enfin une partie intéressante, soyez attentifs, tout ou presque se joue au niveau des groupes.
Appliquer une à une des permissions aux joueurs c'est lourd, surtout quand il y en a beaucoup et que beaucoup reviennent souvent pour des utilisateurs différents. Les groupes permettent de nous soulager de ce fardeau en rassemblant toutes les permissions et autres propriétés sous une seule étiquette, mais je pense que vous avez déja saisi le principe.
Prenons un exemple : un joueur A va pouvoir construire, détruire, utilise telle commande etc... un joueur B va pouvoir faire la même chose que ce joueur A, un joueur C de même. Il est plus facile de créer un groupe du genre "citoyen" avec ces permissions et ensuite d'assigner ce groupe à chacun de vos joueurs plutôt que de tout faire individuellement, non ?
Analysons ce code :

Code:
groups:
    Default:
        default: true
        info:
            prefix: ''
            suffix: ''
            build: false
        inheritance:
        permissions:
            - 'foo.bar'
    Moderator:
        default: false
        info:
            prefix: ''
            suffix: ''
            build: true
        inheritance:
            - Default
        permissions:
            - 'bar.foo'
    Admins:
        default: false
        info:
            prefix: ''
            suffix: ''
            build: true
        inheritance:
        permissions:
            - '*'

Sous l'étiquette "groups:", nous repérons de suite 3 groupes : Default, Moderator et Admins. Regardons de plus près ce que compose le groupe Default, sachant que la structure des autres groupes est identique.

Code:
Default:
    default: true
    info:
        prefix: ''
        suffix: ''
        build: false
    inheritance:
    permissions:
        - 'foo.bar'
  • default : Permet d'indiquer que ce groupe sera le groupe par défaut de tout nouveau joueur arrivant sur le serveur, sauf si celui-ci a déja été assigné à un groupe (voir partie users). Ici la valeur est à "true" donc oui, ce sera le cas, sinon mettre la valeur à "false".
  • info : Propriétés propres au groupe, ici il y en a 3 dont une très importante.
    • prefix : Permet d'insérer un préfixe avant le nom du joueur. Inutile si aucun plugin de chat tels que EssentialsChat, iChat ou Herochat (ou d'autres).
    • suffix : Même chose sauf que ça insére un suffixe après le nom du joueur.
    • build : Option très importante. Si cette valeur vaut "true" alors tous les joueurs de ce groupe pourront poser/détruire des blocs, dans le cas contraire si la valeur vaut "false", ce sera impossible. Je suis sûr que vous imaginez comment exploiter cette trouvaille :P
  • inheritance : Permet d'hériter des permissions d'un autre groupe.
  • permissions : Les permissions elles-mêmes. C'est à cet endroit que vous lister la permissions des autres plugins pour autoriser ou non les joueurs de ce groupe à utiliser des commandes, effectuer certaines actions etc...

Users
Et une autre partie importante. Ici sont listés tous les joueurs qui sont dans un groupe qui est autre celui que celui de base. En effet, le groupe Default ayant la propriété "default" à "true", tous les joueurs sauf ceux listés ici seront dans ce groupe, donc inutile de les inscrire dans cette partie.
Analysons le code d'un utilisateur :

Code:
TheNo1Yeti:
    group: Admins
    permissions:
  • group : Le groupe auquel le joueur appartient, c'est assez explicite je trouve.
  • permissions : Permissions supplémentaires, individuelles au joueur.
Alors, pas compliqué du tout ? Mais ce n'est pas fini, voyons comment gérer les permissions d'un groupe. Vous avez la possibilité de donner une (ou plus) permission, d'en retirer une (ou plus).

Pour donner une permission, que ce soit pour un groupe ou un utilisateur, vous devez écrire le nom de la permission suite à l'étiquette "permissions:" sous le format :

Code:
- 'le nom de la permission'

En respectant scrupuleusement la syntaxe et les espaces. Respectez l'indentation, grâce à la touche Tab, afin de marquer un retrait par rapport à l'étiquette "permissions".

Pour retirer une permission :

Code:
- '-le nom de la permission'

Pourquoi retirer une permission ? Ne suffit-il pas de ne l'omettre ? Si biensur, mais dans le cas d'un héritage de permissions, cela permet de retirer une permission de la liste de celles héritées. Ca évite de définir 2 groupes dont l'un contient toutes les permissions d'un autre avec celle(s) que l'on veut en moins.

Donner/retirer toutes les permissions, il suffit d'utiliser le caractère '*'.
En installant divers plugins qui nécéssiteront l'utilisation de Permissions, vous verrez que le nom des permissions sont sous ce format :

Code:
nom_du_plugin.permission1.sous_permission1
nom_du_plugin.permission1.sous_permission2
nom_du_plugin.permission1.sous_permission3

Il est souvent le cas d'autoriser toutes les sous permissions d'une permission parente et il serait très fastidieux de les écrire une à une. Dans ce cas, il suffit juste de marquer :

Code:
- 'nom_du_plugin.permission1.*'

De la même façon pour interdire :

Code:
- '-nom_du_plugin.permission1.*'

Il existe aussi un cas sépcial, permettant de donner toutes les permissions, sans pourtant connaitre le nom de celles-ci:

Code:
- '*'

Héritage
J'en ai déja un peu parlé, l'héritage ça sert à reprendre les permissions d'un autre groupe, tout simplement.

Exemple 1
On considère le code suivant :

Code:
groups:
    A:
        permissions:
            - 'p1'
            - 'p2'
            - 'p3'
    B:
        inheritance: A
        permissions:
            - 'p4'
            - 'p5'

Au final, le groupe B aura ses propres permissions + celles du groupe A soit p1, p2, p3, p4 et p5.

Exemple 2
On considère le code suivant :

Code:
groups:
    A:
        permissions:
            - 'p1'
            - 'p2'
    B:
        inheritance: A
        permissions:
            - '-p2'
            - 'p3'

Le groupe B aura toutes les permissions du group A sans la permission p2 soit p1 et p3.

Evidemment, vous pouvez concevoir une hiérarchie de telle sorte qu'un groupe hérite d'un autre qui celui-ci hérite d'un autre et ainsi de suite.
Attention : Si un groupe possède la permission '*', ne pas l'hériter d'un autre groupe. De toute façon ce serait complètement inutile par logique mais ça ferait planter le plugin.

Voilà, je pense qu'en terme de configuration, on a fait le tour, en tout cas vous savez ce qu'il faut pour bien faire fonctionner votre serveur grâce à ce plugin.

Mise à jour
Si le plugin venait à être mis à jour, ne re-télécharger pas toute l'archive avec le fichier de configuration par défaut mais prenez uniquement le fichier *.jar (Permissions.jar) et écrasez l'ancien.

Commandes
Il en existe que 3 dont une la plus importante, permettant de recharger tous les fichiers de config de vos mondes si vous l'avez editer et que vous voulez appliquer les changements. Cela permet d'éviter de redémarrer le serveur.

Code:
/permissions -reload all

Pour ceux qui connaissent GroupManager, vous allez me dire qu'il est mieux car il dispose d'un tas de commandes In-Game pour gérer les permissions sans devoir toucher au fichier physiquement. C'est vrai, c'est un défaut de Permissions. Cependant, vous pourrez parer à ce problème en utilisant le plugin PermissionsPlus, loin d'être aussi complet que GM mais il ajoute quelques commandes de base à Permissions, je n'en dirais pas plus, ne l'ayant jamais utilisé.

Erreurs fréquentes
  • Renommer le fichier de configuration avec le nom de son monde. C'est bête, mais lorsqu'on voit une grosse erreur java au chargement du plugin, c'est souvent dû à cet oubli.
  • Ne pas avoir configurer Notepad++ pour indenter correctement son code YAML.
    Astuce : Allez dans le menu Langage > choisissez YAML. Si votre code est faux au niveau de l'indentation, il sera coloré en rouge. De plus, pour une vérification approfondie, coller votre code dans ce Parser Yaml et lancer la conversion. A droite, vous verrez le résultat et dans le cas contraire une erreur, n'allez pas plus loin corrigez là sinon le plugin de fonctionnera jamais.
  • Faites attention à la casse de vos noms de groupes et permissions. En effet, si vous avez un groupe "Admins" et que vous mettez "group: admins", ça ne fonctionnera pas.
  • Ne pas avoir supprimer les plugins qui ont la même fonction que Permissions comme GroupManager. Dans ce cas là, GroupManager prendra le dessus et cous comprendrez jamais pourquoi Permissions ne fonctionne pas alors qu'il n'y a aucune erreur apparente (dans la console).

Liens utiles
La page officielle de Permissions sur bukkit.org
Archive ZIP
Jar seulement

Conclusion
J'ai essayé de donner le maximum d'informations à propos de ce plugin plus qu'indispensable. Je connais surement pas tout, donc si quelqu'un à quelque chose à rajouter ou à corriger, n'hésitez pas.
Je précise que ce tuto ou présentation de ce plugin est de moi. J'espère en tout cas dans le futur, avoir moins de topic dans la section support à ce propos :D
Vous pouvez tout de même poster à la suite de ce topic tout problème relatif à Permissions et lui seul.
 
Moi j'ai une toute petite question.
Est ce que les permissions propre à Worldguard ou autre peuvent être insérer grâce à ce plug-in ?
Par exemple je veux que tout les joueurs ai la commande /stack (range son inventaire)
Que 3 joueurs ai la commandes /tp et /heal
Et que les admins ai /tp /heal /kick /ban / stack /locate ....
Est ce que cela s'ajoute dans les permissions lors de la configuration du plug-in ou c'est dans le config.yml de worldguard ou worldedit uniquement ?
J'aimerais bien que tu ajoutes un exemple de groupes avec des permissions configurés ou que quelqu'un m'explique les différentes permissions que l'on peut accorder. Car cela fait plusieurs temps que je cherche comment faire l'exemple donné au dessus mais je ne trouves pas :(
 
Toutes les permissions des plugins vont dans ce fichier, c'est dans celui-ci et lui seul où tout est gérer. Encore faut-il qu'il y ait des permissions pour autoriser telle ou telle commande, malheureusement tout n'est pas possible. Il ne suffit pas de mettre les commandes en dur dans le fichier de permissions, il faut se référer à la documentation du plugin en question pour savoir quoi mettre en fonction de ses besoins.
 
Bonjour cela fait une semaine que je suis embeter avec permission, en effet j'essaye d'empêcher les joueurs visiteur sur mon serveur de construire mais quand je met False sur build dans le groupe default ils peuvent toujours détruire.

voici mon fichier


# AntiBuild is included with this. To disable a group from being able to build then
# set the build: flag to false (build: false). If you want a group to be able to build
# then set it to true.
##
# Groups can contain inheritance.
# To make a group inherit the permissions from another
# group simply place the groups name in the "inheritance:" like so:
#
# Example:
# inheritance:
# - Default
##
# All permissions including the asterisks must be placed in single quotes.
# like so:
#
# - 'foo.bar'
#
# Otherwise errors will happen!
##
# Globalized Permission settings:
#
# If a permission contains periods (.) you can denote a globalized parameter:
#
# - 'foo.*'
#
# This will allow you to use all general commands.
#
##
# Single Asterisk denotes all commands:
#
# - '*'
# If you give a group this permissions, do not have the group inherit any permissions
# from other groups. Any users assigned to this group should NOT be given any additional
# permissions either.
##
# To exempt a node use the - prefix like so:
# - '-foo.bar'
##
# prefix: and suffix: do not do anything on their own. You need another outside plugin
# such as iChat or HeroChat in order for these to do anything.
groups:
Default:
default: true
info:
prefix: ''
suffix: ''
build: false
permissions:
Moderator:
default: false
info:
prefix: ''
suffix: ''
build: false
- Default
permissions:
Admins:
default: false
info:
prefix: '&1[&3Admin&1]&2'
suffix: '&4'
build: true

##
# Users denote which users are included in which group.
# TheNo1Yeti is in the Admin group
# Herpina is a member of the Moderator group but also has access
# to the herp.derp permissions
# Derpina is a member of the admin group but does not have access
# to the derp.derp permission node
# Users can also have a prefix and suffix as seen with Herpina
##
users:
default: true
info:
prefix: ''
suffix: ''
build: false
inheritance:
permissions:
- 'foo.bar'
supermouette:
group: Admins
permissions:
- 'lockette.admin.break'
- 'lockette.admin.snoop'
havanaboom:
group: Admins
permissions:
mrhouit:
group: Admins
permissions:
laurianna:
group: Admins
permissions:
killercastor
group: Admins
permissions:




voila je vous remerci d'avance car la j'ai vraiment essayé beaucoup de solutions qui n'ont pas marché .
 
Y'a moyen tu recopies colles ton fichier avec la balises code pour que ça respecte correctement l'indentation ? C'est crucial pour que je puisse t'aider.

En tout cas d'après ce que j'ai pu voir par ci par là, tu ne sais pas comment rédiger un fichier de permissions, il y a beaucoup de trucs qui n'ont pas leur place la où ils sont actuellement.
 
Code:
#   such as iChat or HeroChat in order for these to do anything.
groups:
    Default:
        default: true
        info:
            prefix: ''
            suffix: ''
            build: false
        permissions:
    Moderator:
        default: false
        info:
            prefix: ''
            suffix: ''
            build: false
            - Default
        permissions:
    Admins:
        default: false
        info:
            prefix: '&1[&3Admin&1]&2'
            suffix: '&4'
            build: true

##
# Users denote which users are included in which group.
# TheNo1Yeti is in the Admin group
# Herpina is a member of the Moderator group but also has access
# to the herp.derp permissions
# Derpina is a member of the admin group but does not have access
# to the derp.derp permission node
# Users can also have a prefix and suffix as seen with Herpina
##
users:
       default: true
        info:
            prefix: ''
            suffix: ''
            build: false
        inheritance:
        permissions:
            - 'foo.bar'
    supermouette:
        group: Admins
        permissions:
           - 'lockette.admin.break'
           - 'lockette.admin.snoop'
    havanaboom:
        group: Admins
        permissions:
    mrhouit:
        group: Admins
        permissions:
    laurianna:
        group: Admins
        permissions:
    killercastor
        group: Admins
        permissions:


voila et si je savais parfaitement faire ce genre de chose je ne demanderais pas de l'aide malheureusement merci de ton aide
 
Je me doute, mais un minimum quand même, j'ai fait un tuto, super clair et détaillé, malgré ça certains arrivent quand même à faire des trucs complètement différent. Puis je me demande si vous vous relisez après, car il y a de ces erreurs d'inatention, c'est bête.

Venons-en au fait :

Code:
        default: true
         info:
             prefix: ''
             suffix: ''
             build: false
         inheritance:
         permissions:
             - 'foo.bar'

Ca n'a absolument pas sa place ici. C'est un groupe ça, ça va donc dans la partie "groups:". De plus, ce groupe existe déja, tu l'as déja écrit dans ça sert à rien.

Code:
     killercastor 
         group: Admins
         permissions:

Là, c'est une erreur d'inatention car le nom d'un utilisateur est toujours suivi d'un ':', pourtant tu l'as compris pour les autres, donc tu dois écrire "killercastor:".

Code:
     Admins:
         default: false
         info:
             prefix: '&1[&3Admin&1]&2'
             suffix: '&4'
             build: true

Tu as omis le "permissions:", même s'il est vide, mets le, ça sera toujours utile. De plus, il est commun pour admins d'avoir toutes les permissions, mais bon à toi de voir.

Idem que pour "permissions:", il faut aussi mettre "inheritance:" même s'il n'y a pas d'héritage.

Code:
     Moderator:
         default: false
         info:
             prefix: ''
             suffix: ''
             build: false
             - Default
         permissions:

Le "- Default", qu'est-ce qui vient faire ici ? Vire ça, ça ne fait que gêner et rendre le fichier invalide.


Voilà, donc au final beaucoup d'erreurs qui auraient pû être éviter sans avoir lu le tuto... Ceci dit toutes l'auraient pû l'être en l'avoir lu correctement.
 
ne vous mettez sur la defensive, je ne critique pas votre tutoriel c'est juste que mon fichier est modifier bizzarement à cause de multiples essaies que j'ai du effectuer seuls les deux petits points manquant sont une faute d'inatention



Code:
##
#   prefix: and suffix: do not do anything on their own.  You need another outside plugin
#   such as iChat or HeroChat in order for these to do anything.
groups:
    Default:
        default: true
        info:
            prefix: ''
            suffix: ''
            build: false
        inheritance
        permissions:
    Moderator:
        default: false
        info:
            prefix: ''
            suffix: ''
            build: false
        inheritance:
        permissions:
    Admins:
        default: false
        info:
            prefix:
            suffix:
            build: true
        inheritance:
        permissions:

##
# Users denote which users are included in which group.
# TheNo1Yeti is in the Admin group
# Herpina is a member of the Moderator group but also has access
# to the herp.derp permissions
# Derpina is a member of the admin group but does not have access
# to the derp.derp permission node
# Users can also have a prefix and suffix as seen with Herpina
##
users:
    supermouette:
        group: Admins
        permissions:
           - 'lockette.admin.break'
           - 'lockette.admin.snoop'
    havanaboom:
        group: Admins
        permissions:
    mrhouit:
        group: Admins
        permissions:
    laurianna:
        group: Admins
        permissions:
    killercastor:
        group: Admins
        permissions:




Voici le fichier corrigé mais comme je vous l'es dit précedement avec ce fichier les visiteurs peuvent toujours construire, je ne pense pas que ca soit normal.
Merci d'avance de votre patience
 
Non ça va toujours pas :

Code:
groups:
     Default:
         default: true
         info:
             prefix: ''
             suffix: ''
             build: false
         inheritance
         permissions:

Il faut mettre "inheritance:", tu oublies ':', c'est bête mais il faut se RELIRE, toujours se RELIRE.

Quand tu charges ton serveur, tu n'as aucune erreur liée à permissions ? Car là, ton fichier est invalide. Je pense que tu as mal lu mon tuto, à la fin c'est écrit :

De plus, pour une vérification approfondie, coller votre code dans ce Parser Yaml et lancer la conversion. A droite, vous verrez le résultat et dans le cas contraire une erreur, n'allez pas plus loin corrigez là sinon le plugin de fonctionnera jamais.

J'attends ta correction.
 
voilà le fichier au propre je te tien au courant si ca marche
Code:
   permissions either.
##
#   To exempt a node use the - prefix like so:
#       - '-foo.bar'
##
#   prefix: and suffix: do not do anything on their own.  You need another outside plugin
#   such as iChat or HeroChat in order for these to do anything.
groups:
    Default:
        default: true
        info:
            prefix: ''
            suffix: ''
            build: false
        inheritance:
        permissions:
    Moderator:
        default: false
        info:
            prefix: ''
            suffix: ''
            build: false
        inheritance:
        permissions:
    Admins:
        default: false
        info:
            prefix:
            suffix:
            build: true
        inheritance:
        permissions:

##
# Users denote which users are included in which group.
# TheNo1Yeti is in the Admin group
# Herpina is a member of the Moderator group but also has access
# to the herp.derp permissions
# Derpina is a member of the admin group but does not have access
# to the derp.derp permission node
# Users can also have a prefix and suffix as seen with Herpina
##
users:
    supermouette:
        group: Admins
        permissions:
           - 'lockette.admin.break'
           - 'lockette.admin.snoop'
    havanaboom:
        group: Admins
        permissions:
    laurianna:
        group: Admins
        permissions:
    mrhouit:
        group: Admins
        permissions:
    killercastor:
        group: Admins
        permissions:



merci encore de ton aide