UmgtPermissionCondition

Im Entwickler-Forum können Implementierungsdetails sowie Alternativen der Umsetzung diskutiert werden. // Here, developers can discuss implementation details of features of their projects.
Antworten
GeneralCrime
Beiträge: 67
Registriert: 14.12.2011, 07:13:16

UmgtPermissionCondition

Beitrag von GeneralCrime » 12.03.2015, 18:21:36

Hallo Leute,
so da ich es persönlich immer blöd fand das es keine klare Funktion gibt um Permissions ab zu fragen habe ich hier mal was gebastelt.

Code: Alles auswählen

<?php
/**
 * Created by PhpStorm.
 * User: General Crime
 * Date: 12.03.2015
 * Time: 15:09
 */

namespace APF\myextensions\usermanagement\pres\condition;

use APF\modules\usermanagement\pres\condition\UserDependentContentCondition;
use APF\modules\usermanagement\pres\condition\UserDependentContentConditionBase;
use APF\modules\usermanagement\biz\model\UmgtUser;
use APF\modules\usermanagement\biz\model\UmgtPermission;

/**
 * @package  APF\myextensions\usermanagement\pres\condition
 * @class    UmgtPermissionCondition
 * Text
 * @author   Christian Merz
 * @version
 * Version 0.1, 12.03.2015 - Erstellt
 */
class UmgtPermissionCondition extends UserDependentContentConditionBase implements UserDependentContentCondition {


   /**
    * @public
    * Führt die Aktion aus.
    * @param  string                                        $conditionKey
    * @param  APF\modules\usermanagement\biz\model\UmgtUser $user
    * @return bool
    * @version
    * Version 0.1, 12.03.15 - Erstellt
    */
   public function matches($conditionKey, UmgtUser $user = NULL) {

      if ($user === NULL) {
         return FALSE;
      }

      foreach ($this->getPermissions($user) as $permission) {
         if (in_array($permission->getName(), $this->getOptions())) {
            return TRUE;
         }
      }

      return FALSE;
   }

   /**
    * @public
    * Schlüssel für die Funktion.
    * @return string
    * @version
    * Version 0.1, 12.03.15 - Erstellt
    */
   public function getConditionIdentifier() {
      return 'permission';
   }

   /**
    * @public
    * Lädt erst die Rollen des Benutzers und dann dessen Berechtigungen.
    * Doppelte Einträge werden vermieden.
    * @param  \APF\modules\usermanagement\biz\model\UmgtUser $user
    * @return \APF\modules\usermanagement\biz\model\UmgtPermission
    * @throws \APF\modules\genericormapper\data\GenericORMapperException
    * @version
    * Version 0.1, 13.03.15 - Erstellt
    */
   private function getPermissions(UmgtUser $user) {
      $RoleList        = $user->loadRelatedObjects('Role2User');
      $permissionArray = array();
      foreach ($RoleList as $Role) {
         $PermissionList = $Role->loadRelatedObjects('Role2Permission');
         foreach ($PermissionList as $Permission) {
            if (!array_key_exists($Permission->getObjectId(), $permissionArray))
               $permissionArray[$Permission->getObjectId()] = $Permission;
         }
      }

      return array_merge($permissionArray);
   }

}
Wäre doch mal schön das im Umgt mit ein zu pflegen es muss ja um UserDependentContentConditionSet mit eingetragen werden da es kein Taglib dafür gibt.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4533
Registriert: 04.11.2007, 16:13:53

Re: UmgtPermissionCondition

Beitrag von dr.e. » 15.03.2015, 13:35:13

Hi,

danke für deinen Beitrag, ich nehme das sehr gerne mit auf! Melde mich, sobald die Klasse im GitHub-Repo für 3.0 verfügbar ist.
Viele Grüße,
Christian

GeneralCrime
Beiträge: 67
Registriert: 14.12.2011, 07:13:16

Re: UmgtPermissionCondition

Beitrag von GeneralCrime » 16.03.2015, 20:01:27

Super danke, bitte noch im Classen text was eintragen das hatte ich vergessen!

PS: Glaub der Topic kommt sogar nach Erweiterungen.

PSS: Ich hab das ganze mal im Tracker eingetragen.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4533
Registriert: 04.11.2007, 16:13:53

Re: UmgtPermissionCondition

Beitrag von dr.e. » 16.03.2015, 23:18:39

Danke dir! :)

Der Vollständigkeit wegen: http://tracker.adventure-php-framework. ... php?id=247
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: UmgtPermissionCondition

Beitrag von dave » 20.03.2015, 13:31:44

Finde das sehr nützlich. Wie kann ich denn ganz allgemein die verschiedenen ConditionSets für mich verwenden? Ein Code-Schnipsel würde mir gut tun ;)

Code: Alles auswählen

$condSet = &$this->getServiceObject('APF\modules\usermanagement\pres\condition',
                    'UserDependentContentConditionSet');
$condSet->addCondition(new FooCondition());
Daraus werde ich nicht schlauer ^^

Benutzeravatar
dr.e.
Administrator
Beiträge: 4533
Registriert: 04.11.2007, 16:13:53

Re: UmgtPermissionCondition

Beitrag von dr.e. » 21.03.2015, 00:34:08

Schau mal in die Sandbox, da findest du einen Anwendungsfall des UmgtTemplateTags:

Code: Alles auswählen

<core:addtaglib
   class="APF\modules\usermanagement\pres\taglib\UmgtTemplateTag"
   prefix="umgt"
   name="template"
/>
<core:addtaglib
   class="APF\modules\usermanagement\pres\taglib\UmgtLogoutLinkTag"
   prefix="umgt"
   name="logoutlink"
/>
<umgt:template condition="logged-in" transform-on-place="true">
   <li><a href="<umgt:logoutlink />">Logout</a></li>
</umgt:template>
Im Attribut condition ist die jeweilige Condition referenziert. Natürlich kannst du das auch im Code verwenden. Das geht dann so:

Code: Alles auswählen

$condSet = & $this->getServiceObject('APF\modules\usermanagement\pres\condition\UserDependentContentConditionSet');
if ($condSet->conditionMatches($this->getContext(), 'logged-in', '')) {
   ...
} else {
   ...
} 
Hoffe das hilft dir weiter!
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: UmgtPermissionCondition

Beitrag von dave » 21.03.2015, 16:26:31

Jup, alles wunderbar. Vielen Dank!

Wenn ich bedenke, wie ich das noch zu APF 1.x-Zeiten gemacht habe ist das APF 3 ein riesen Fortschritt :D

Benutzeravatar
dr.e.
Administrator
Beiträge: 4533
Registriert: 04.11.2007, 16:13:53

Re: UmgtPermissionCondition

Beitrag von dr.e. » 22.03.2015, 14:01:38

Super, freut mich! :)
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast