Zend_Acl-Refining.xml 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <sect1 id="zend.acl.refining">
  2. <title>Verfijning van toegangscontrole</title>
  3. <sect2 id="zend.acl.refining.precise">
  4. <title>Precieze toegangscontrole</title>
  5. <para>
  6. De basis ACL zoals gedefineerd in de <link linkend="zend.acl.introduction">vorige sectie</link>
  7. laat zien hoe verschillende privileges kunnen worden toegestaan op de gehele ACL ( alle Bronnen ).
  8. Echter in de praktijk, neigen toegangscontroles naar het hebben van uitzonderingen en gevarieerde
  9. niveaus van complexiteit. Zend_Acl staat je toe deze verfijningen in een duidelijke en flexibele manier
  10. te bereiken.
  11. </para>
  12. <para>
  13. Voor het voorbeeld CMS, is vastgesteld dat terwijl de 'medewerker' groep de benodigheden voor het
  14. merendeel van de gebruikers dekt, er een behoefte is aan een nieuwe 'marketing' groep die toegang
  15. nodig heeft tot de nieuwsbrieven en het laatste nieuws in het CMS. De groep is vrij onafhankelijk
  16. en heeft de mogelijkheid om nieuwsbrieven en het laatste nieuws te publiceren en te archiveren.
  17. </para>
  18. <para>
  19. Verder, is er ook verzocht dat de 'medewerker' groep wordt toegestaan om nieuws berichten te zien,
  20. maar ze mogen het laatste nieuws niet herzien. Als laatste, zou het voor iedereen (zelfs voor de
  21. administrators) onmogelijk moeten zijn om nieuws aankondigingen te archiveren, omdat deze
  22. een levensduur hebben van 1-2 dagen.
  23. </para>
  24. <para>
  25. Allereerst passen we de Rol lijst aan. We hebben ontdekt dat de 'marketing' groep de zelfde basis
  26. rechten heeft als de 'medewerkers', dus we defineren 'marketing' zo dat het de rechten overerft
  27. van 'medewerker':
  28. </para>
  29. <programlisting role="php"><![CDATA[<?php
  30. // De nieuwe marketing groep erft de rechten van medewerker
  31. $acl->addRole(new Zend_Acl_Role('marketing'), 'medewerker');]]>
  32. </programlisting>
  33. <para>
  34. Vervolgens, zien we dat de bovenstaande toegangscontrole refereerd naar specifieke Bronnen
  35. ( o.a., "nieuwsbrief", "laatste nieuws", "Nieuws aankondigingen" ). Deze Bronnen gaan we nu toevoegen:
  36. </para>
  37. <programlisting role="php"><![CDATA[<?php
  38. // Maken van de Bronnen voor de regels
  39. require_once 'Zend/Acl/Resource.php';
  40. $acl->add(new Zend_Acl_Resource('nieuwsbrief')); // Nieuwsbrief
  41. $acl->add(new Zend_Acl_Resource('nieuws')); // Nieuws
  42. $acl->add(new Zend_Acl_Resource('laatste_nieuws'), 'nieuws'); // Laatste nieuws
  43. $acl->add(new Zend_Acl_Resource('aankondiging'), 'nieuws'); // Nieuws aankondiging]]>
  44. </programlisting>
  45. <para>
  46. Dan is het enkel nog een kwestie van het defineren van deze specifieke regels op de doel gebieden van de ACL:
  47. </para>
  48. <programlisting role="php"><![CDATA[<?php
  49. // Marketing moet kunnen publiceren en archiveren van de nieuwsbrieven en het laatste nieuws
  50. $acl->allow('marketing', array('nieuwsbrief', 'laatste_nieuws'), array('publiceren', 'archiveren'));
  51. // Medewerkers ( en marketing door overerving ) worden geweigerd om het laatste nieuws te herzien
  52. $acl->deny('medewerker', 'laatste_nieuws', 'herzien');
  53. // Iedereen ( ook de administrators ) worden geweigerd om het nieuws aankondigingen te archiveren
  54. $acl->deny(null, 'aankondiging', 'archiveren');]]>
  55. </programlisting>
  56. <para>
  57. We kunnen nu de ACL raadplegen met de nieuwste wijzigingen:
  58. </para>
  59. <programlisting role="php"><![CDATA[<?php
  60. echo $acl->isAllowed('medewerker', 'nieuwsbrief', 'publiceren') ?
  61. "toegestaan" : "geweigerd"; // geweigerd
  62. echo $acl->isAllowed('marketing', 'nieuwsbrief', 'publiceren') ?
  63. "toegestaan" : "geweigerd"; // toegestaan
  64. echo $acl->isAllowed('medewerker', 'laatste_nieuws', 'publiceren') ?
  65. "toegestaan" : "geweigerd"; // geweigerd
  66. echo $acl->isAllowed('marketing', 'laatste_nieuws', 'publiceren') ?
  67. "toegestaan" : "geweigerd"; // toegestaan
  68. echo $acl->isAllowed('marketing', 'laatste_nieuws', 'archiveren') ?
  69. "toegestaan" : "geweigerd"; // toegestaan
  70. echo $acl->isAllowed('marketing', 'laatste_nieuws', 'herzien') ?
  71. "toegestaan" : "geweigerd"; // geweigerd
  72. echo $acl->isAllowed('redacteur', 'aankondiging', 'archiveren') ?
  73. "toegestaan" : "geweigerd"; // geweigerd
  74. echo $acl->isAllowed('administrator', 'aankondiging', 'archiveren') ?
  75. "toegestaan" : "geweigerd"; // geweigerd]]>
  76. </programlisting>
  77. </sect2>
  78. <sect2 id="zend.acl.refining.removing">
  79. <title>Verwijderen van toegangscontrole</title>
  80. <para>
  81. Om één of meer toegangregels te verwijderen van de ACL, gebruiken we simpelweg de beschikbare
  82. <code>removeAllow()</code> of <code>removeDeny()</code> methodes. Net als bij <code>allow()</code>
  83. en <code>deny()</code>, mag je een <code>null</code> waarde gebruiken om aan te geven dat het
  84. voor alle Rollen, Bronnen en privileges geldt:
  85. </para>
  86. <programlisting role="php"><![CDATA[<?php
  87. // Verwijder het weigeren van herzien van het laatste nieuws voor medewerkers ( en marketing via overerving )
  88. $acl->removeDeny('medewerker', 'laatste_nieuws', 'herzien');
  89. echo $acl->isAllowed('marketing', 'laatste_nieuws', 'herzien') ?
  90. "toegestaan" : "geweigerd"; // toegestaan
  91. // Verwijder het toegestaan van publiceren en archiveren van nieuwsbrieven aan marketing
  92. $acl->removeAllow('marketing', 'nieuwsbrief', array('publiceren', 'archiveren'));
  93. echo $acl->isAllowed('marketing', 'nieuwsbrief', 'publiceren') ?
  94. "toegestaan" : "geweigerd"; // geweigerd
  95. echo $acl->isAllowed('marketing', 'nieuwsbrief', 'archiveren') ?
  96. "toegestaan" : "geweigerd"; // geweigerd]]>
  97. </programlisting>
  98. <para>
  99. Privileges kunnen oplopend worden aangepast zoals je hier boven zag, maar een <code>null</code> waarde
  100. voor de privileges overschrijft zo'n oplopende wijziging:
  101. </para>
  102. <programlisting role="php"><![CDATA[<?php
  103. // Sta marketing alles toe voor het laatste nieuws
  104. $acl->allow('marketing', 'laatste_nieuws');
  105. echo $acl->isAllowed('marketing', 'laatste_nieuws', 'publiceren') ?
  106. "toegestaan" : "geweigerd"; // toegestaan
  107. echo $acl->isAllowed('marketing', 'laatste_nieuws', 'archiveren') ?
  108. "toegestaan" : "geweigerd"; // toegestaan
  109. echo $acl->isAllowed('marketing', 'laatste_nieuws', 'iets') ?
  110. "toegestaan" : "geweigerd"; // toegestaan]]>
  111. </programlisting>
  112. </sect2>
  113. </sect1>
  114. <!--
  115. vim:se ts=4 sw=4 et:
  116. -->