[CakePHP 3.x] Access Control List / Erbitte unterstützung

M3Y3R

Well-known member
ID: 336361
L
8 Mai 2006
1.608
60
Hallo,

ich versuche mich gerade ein wenig an CakePHP 3.x und habe schon so einige Dinge wie Layout und einige Controller/Actions erstellt. Auch ein Login-Bereich ist nach der Anleitung integriert. Dieses funktioniert auch, allerdings benötige ich eine Aufsplittung auf verschiedene Rollen (User, Admin, etc.).

Hierzu möchte ich das zur Verfügung stehende Plugin nutzen. Das Plugin selbst ist via composer installiert worden. Es liegt bereits im Verzeichnis vendor/cakephp/acl. Auch die Einbindung in die Bootstrap-Datei ist wie folgt erfolgt:
PHP:
Plugin::load('Acl', ['bootstrap' => true]);

Zudem wurde die Methode isAuthorized() im App-Controller wie folgt angepasst:
PHP:
public function isAuthorized($user)
{
    $Collection = new ComponentRegistry();
    $acl= new AclComponent($Collection);
    $username=$user['username'];
    $controller=$this->request->controller;
    $action=$this->request->action;
    $check=$acl->check($user['username'],"$controller/$action");
    return $check;
}

Wenn ich mir nun $check ausgeben lassen, erhalte ich folgende Fehlermeldung:
Code:
[B]Warning[/B] (512): DbAcl::check() - Failed ARO node lookup in permissions check. Node references:
Aro: M3Y3R
Aco: Users/index [ROOT/vendor/cakephp/acl/src/Model/Table/PermissionsTable.php, line 77]

Ohne die Ausgabe werde ich auf die Login-Seite weitergeleitet...
Dies liegt Vermutlich nun daran, dass die dazugehörigen Datenbanktabellen noch nicht befüllt sind:
Code:
--
-- Tabellenstruktur für Tabelle `acos`
--

CREATE TABLE IF NOT EXISTS `acos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `parent_id` int(11) DEFAULT NULL,
  `model` varchar(255) DEFAULT NULL,
  `foreign_key` int(11) DEFAULT NULL,
  `alias` varchar(255) DEFAULT NULL,
  `lft` int(11) DEFAULT NULL,
  `rght` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `lft` (`lft`,`rght`),
  KEY `alias` (`alias`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `aros`
--

CREATE TABLE IF NOT EXISTS `aros` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `parent_id` int(11) DEFAULT NULL,
  `model` varchar(255) DEFAULT NULL,
  `foreign_key` int(11) DEFAULT NULL,
  `alias` varchar(255) DEFAULT NULL,
  `lft` int(11) DEFAULT NULL,
  `rght` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `lft` (`lft`,`rght`),
  KEY `alias` (`alias`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `aros_acos`
--

CREATE TABLE IF NOT EXISTS `aros_acos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `aro_id` int(11) NOT NULL,
  `aco_id` int(11) NOT NULL,
  `_create` varchar(2) NOT NULL DEFAULT '0',
  `_read` varchar(2) NOT NULL DEFAULT '0',
  `_update` varchar(2) NOT NULL DEFAULT '0',
  `_delete` varchar(2) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `aro_id` (`aro_id`,`aco_id`),
  KEY `aco_id` (`aco_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Allerdings weiß ich nicht wie diese befüllt werden müssen. Ich habe auch auch schon versucht über Google die entsprechenden Infos in Erfahrung zu bringen, allerdings konnte ich hierzu bisher nichts brauchbares finden.

Ich habe nun die Hoffnung, dass der ein oder andere hier aus dem Klamm-Forum sich mit dem aktuellen CakePHP-Framework und den ACL´s auskennt und mich hier ein wenig unterstützen oder anleiten kann.

Sofern weitere Infos fehlen, bitte kurz bescheid geben, ich liefere diese dann nach.

Hinweis:
Das Projekt selbst wird lokal über VirtualBox auf einem "Ubuntu-Server" betrieben. Es steht daher noch nicht im Internet zur Verfügung.


Danke und viele Grüße
M3Y3R
 
Zuletzt bearbeitet:
Hi,

ich weiß dieser Beitrag ist schon ein wenig älter, aber das Thema noch aktuell :D.

Beschäftige mich auch seid kurzem mit CakePHP 3 und ACL, M3Y3R bist du schon an einer lösung gekommen?

Gruß Olli
 
Bin dem Link gefolgt und habe es auch hinbekommen damit die ACL zu gestallten.

Hast du eventuell schon eine möglichkeit die ACL über einen Controller zu verwalten, denn mit "cake acl..." usw. ist das doch recht umständlich.
Schön wäre eine Grafische Oberfläche, ist mit Sicherheit nicht schwer stehe da aber noch ein wenig auf dem Schlauch, weil CakePHP neu für mich ist.

Gruß Olli