---
title: "Security- - Rolle nach Login nicht zugewiesen?"
url: "https://www.typo3.net/d/111645-security-rolle-nach-login-nicht-zugewiesen"
source: "typo3.net"
tags: ["Archiv","Flow","Frage"]
created: "2012-08-08"
last_reply: "2012-08-11"
replies: 3
solved: false
page: 1
pages: 1
lang: "de"
---

# Security- - Rolle nach Login nicht zugewiesen?

Archiv › Flow · 3 Antworten · gestartet 2012-08-08

## Eröffnungsbeitrag

**wusel** · 2012-08-08 · [Beitrag #1](https://www.typo3.net/d/111645-security-rolle-nach-login-nicht-zugewiesen/1)

Hallo an alle, ich habe da mal eine Frage zum Security-Layer von FLOW3 :p

Ich habe eine einfache Konfiguration mit geschützem Bereich, Login, einem User und einer Rolle "Administrator" eingerichtet. In der DB-Tabelle "typo3_flow3_security_account" ist der angelegte User gespeichert und hat dort auch die Rolle "Administrator". Das Login (mittels TYPO3\FLOW3\Authentication) funktioniert und der User wird erfolgreich authentifiziert. Auch das "csrfToken" wird automatisch an die URl angehängt.

Wenn ich allerdings auf den geschützten Bereich zugreifen will bekomme ich die Meldung "Access denied!".

```php
Fehlermeldung in Security_Development.log: ###############################

12-08-08 14:46:04 5711       127.0.0.1      INFO      FLOW3                Successfully re-authenticated tokens for account "wusel"
12-08-08 14:46:04 5711       127.0.0.1      INFO      FLOW3                Access denied (0 denied, 0 granted, 1 abstained) to method Acme\Artikel\Controller\ArtikelController::__construct().


Policy.yaml: ############################################################

resources:
  methods:
    RestrictedArea: 'class(Acme\Artikel\Controller\.*)'
  roles:
    Administrator: []
  acls:
    Administrator:
      methods:
        RestrictedArea: GRANT


Settings.yaml: ###########################################################

TYPO3:
  FLOW3:
   security:
      enable: true
      authentication:
        providers:
          DefaultProvider:
            provider: PersistedUsernamePasswordProvider
            entryPoint: 'WebRedirect'
            entryPointOptions:
              uri: 'login/'


User-Account wurde wie folgt erzeugt: ##################################

$identifier = 'wusel';
$password = 'geheim';
$roles = array('Administrator');
$authenticationProviderName = 'DefaultProvider';
$account = $this->accountFactory->createAccountWithPassword($identifier, $password, $roles, $authenticationProviderName);
$this->accountRepository->add($account);
```

Beim Test im Fluid-Template mit folgendem Code wird "You are NOT an Administrator" ausgegeben:

```php
<f:security.ifHasRole role="Administrator">
        <f:then>
                You are an Administrator
        </f:then>
        <f:else>
                You are NOT an Administrator
        </f:else>
</f:security.ifHasRole>
```

Es scheint so, dass der User sich zwar anmelden kann, er dann aber keine Administrator-Rechte hat.

Warum nur? Wie verhelfe ich den User zu seinen Administrator-Rechten?
#angry#

PS:
Mir ist klar, dass ich hier nicht den vollständigen Quellcode angegeben habe. Falls was fehlt bzw. unklar ist liefere ich gerne noch was nach.

## Antworten

### [#2](https://www.typo3.net/d/111645-security-rolle-nach-login-nicht-zugewiesen/2) · Unbekannter Benutzer · 2012-08-09

Ich habs jetzt gerade nicht im AOP nachgeschaut aber ich vermute, dass das Problem ist das Deine Resourcedefinition alle Methoden im Controller catched und das im constructor ein Problem ist. Du solltest das auf die Actions beschränken das sollte auch in den Beispielen so sein... Ich vermute das reicht schon.

### [#3](https://www.typo3.net/d/111645-security-rolle-nach-login-nicht-zugewiesen/3) · wusel · 2012-08-10

> **Kitsunet schrieb:**
>
> Ich habs jetzt gerade nicht im AOP nachgeschaut aber ich vermute, dass das Problem ist das Deine Resourcedefinition alle Methoden im Controller catched und das im constructor ein Problem ist. Du solltest das auf die Actions beschränken das sollte auch in den Beispielen so sein... Ich vermute das reicht schon.

Danke für die schnelle Hilfe Kitsunet.

Ich habe bei den Resourcedefinitionen schon so einiges ausprobiert, da ich auch erst fest davon überzeugt war, es müsste daran liegen.

Aber egal welche Definition der folgenden Definitionen ich verwende (die Klasse ArtikelController komplett sperren oder nur die edit-Action), ich komme als angemeldeter User nicht in den jeweils geschützten Bereich.

```php
Policy.yaml: ############################################################
 
resources:
  methods:
    RestrictedArea: 'class(Acme\Artikel\Controller\ArtikelController)'
    #RestrictedArea:  'method(Acme\Artikel\Controller\ArtikelController->editAction())'
  roles:
    Administrator: []
  acls:
    Administrator:
      methods:
        RestrictedArea: GRANT
```

Es scheint eben leider so, als ob der angemeldete User keine Administrator-Rolle hat. Ich habe das jetzt mal genauer wissen wollen mittels folgendem Code in einem nicht geschützten Bereich (LoginController-IndexAction):

```php
class LoginController extends ActionController {

	/**
	 * @FLOW3\Inject
	 * @var \TYPO3\FLOW3\Security\Context
	 */
	protected $securityContext;

	/**
	 *
	 *
	 * @return string
	 */
	public function indexAction() {
		$roles = $this->securityContext->getRoles();
		foreach ($roles as $role) {
		  \TYPO3\FLOW3\var_dump($role->__toString());
		}
	}
}
```

Ohne Login wird folgendes ausgegeben:

```php
FLOW3 Variable Dump
'Everybody' (9)

FLOW3 Variable Dump
'Anonymous' (9)
```

Nach Login erscheint folgende Ausgabe:

```php
FLOW3 Variable Dump
'Everybody' (9)
```

Schön, nach dem Login hat der User also nicht mehr die Rolle "Anonymous". Aber warum hat er keine Rolle "Administrator"? Ich denke ich mache irgendetwas ganz banales falsch. Nur was?

### [#4](https://www.typo3.net/d/111645-security-rolle-nach-login-nicht-zugewiesen/4) · wusel · 2012-08-11

Fall gelöst - Täter: YAML

Nein, lag an meiner eigenen Dummheit. Die YAML-Daten in Policy.yaml müssen nur richtig strukturiert werden und schon funktioniert alles wie gewünscht. "resources", "roles" und "acls" müssen auf der gleichen Ebene liegen (nicht eingerückt):

```php
Policy.yaml: ############################################################
 
resources:
  methods:
    RestrictedArea: 'class(Acme\Artikel\Controller\ArtikelController)'
    #RestrictedArea:  'method(Acme\Artikel\Controller\ArtikelController->editAction())'
roles:
  Administrator: []
acls:
  Administrator:
    methods:
      RestrictedArea: GRANT
```

Puh, was ne Aufregung für nichts. Sorry ;)

---

Quelle: „Security- - Rolle nach Login nicht zugewiesen?“, typo3.net, https://www.typo3.net/d/111645-security-rolle-nach-login-nicht-zugewiesen
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
