2016-09-29 1 views
0

ich eine E-Commerce-Website erstellen mit CakePHP 3Superuser oder Admin in CakePHP 3 - E-Commerce mit Admin

ich eine Admin-Seite zu erstellen, die die Admin Produkte hochladen und möglicherweise Ansicht erlaubt ein paar KPIs etc ..

Gibt es einen Weg in Cake, um einen Benutzer (allgemeine Kundeneinkauf auf der Website) und einen Superuser (oder Admin) zur gleichen Zeit zu haben? Ich habe eine "is_admin" Spalte in meiner Benutzer Tabelle, um zwischen Admin und Benutzer zu unterscheiden. Muss ich einfach so etwas in meiner addProducts-Funktion haben oder gibt es einen besseren Weg?:

public function addProducts(){ 
    $user = $this->Auth->user(); 
    if($user['is_admin']) { 
     //allow access 
    } else { 
     //throw anauthorised exception 
    } 
} 

Vielen Dank im Voraus

Antwort

1

Sie können es über verschiedene URLs für admin und Front Benutzer verwalten. Dies kann über die Routen und den APP Controller verwaltet werden. Was ich für eine meiner appplication bin mit wie unten:

In der routes.php Datei

Router::prefix('admin', function ($routes) { 
    // All routes here will be prefixed with `/admin` 
    // And have the prefix => admin route element added. 
    $routes->fallbacks('DashedRoute'); 
    $routes->connect('/', array('controller' => 'Users', 'action' => 'login')); 
    /* Here you can define all the routes for the admin */ 
}); 

Router::scope('/', function ($routes) { 

    $routes->connect('/', array('controller' => 'Users', 'action' => 'login', 'home')); 
    /* Here you can define all the routes for the frontend */ 
}); 

Bitte für die Admin beachten Sie benötigen ein Verzeichnis, in alle schaffen/src/Controller,/src/Vorlage mit dem Namen "Admin" und innerhalb dieser Verzeichnisse können Sie die gleiche Struktur verwenden, die wir in unserem Code verwenden.

Jetzt kommt der Code, der

public $prefix = ''; 
public function initialize() 
{ 

    $this->prefix = (!empty($this->request->params['prefix'])?$this->request->params['prefix']:''); 
    $this->set('prefix',$this->prefix); 
    if(!empty($this->prefix) && $this->prefix==='admin') 
    { 

     $this->loadComponent('Auth', [ 

      'loginAction' => [ 
       'controller' => 'Users', 
       'action' => 'login', 
       'prefix'=>'admin' 
      ], 
      'loginRedirect' => [ 
       'controller' => 'Users', 
       'action' => 'index', 
       'prefix'=>'admin' 
      ], 
      'logoutRedirect' => [ 
       'controller' => 'Users', 
       'action' => 'login', 
       'prefix'=>'admin' 
      ], 
      'authError' => 'Did you really think you are allowed to see that?', 
      'authenticate' => [ 
       'Form' => [ 
        'finder' => 'admin', 
        'fields' => ['username' => 'email', 'password' => 'password'] 
       ] 
      ], 
      'storage' => ['className' => 'Session', 'key' => 'Auth.Admin'] 
     ]); 
    } 

    else 
    { 

     $this->loadComponent('Auth', [ 

      'loginAction' => [ 
       'controller' => 'Users', 
       'action' => 'login' 
      ], 
      'loginRedirect' => [ 
       'controller' => 'Users', 
       'action' => 'myaccount' 
      ], 
      'logoutRedirect' => [ 
       'controller' => 'Users', 
       'action' => 'login' 
      ], 
      'authError' => 'Did you really think you are allowed to see that?', 
      'authenticate' => [ 
       'Form' => [ 
        'finder' => 'user', 
        'fields' => ['username' => 'email', 'password' => 'password'] 
       ] 
      ], 
      'storage' => ['className' => 'Session', 'key' => 'Auth.User'] 
     ]); 
    } 
} 

Hier in /src/Controller/AppController.php geschrieben werden muss, kann man sehen, dass wir verschiedene Schlüssel für die Speicherung Auth.User und Auth verwenden. Admin

Für den Finder benötigen Sie den Code unten in Ihrem Benutzermodell Tisch im src \ Modell \ Table \ UsersTable.php

public function findAdmin(\Cake\ORM\Query $query, array $options) 
{ 
    $query 
     ->select(array('Users.email', 'Users.password','Users.id','Users.role_id')) 
     ->where(array('Users.role_id' => 1)); 

    return $query; 
} 
public function findUser(\Cake\ORM\Query $query, array $options) 
{ 
    $query 
     ->select(array('Users.email', 'Users.password','Users.id','Users.role_id')) 
     ->where(array('Users.status' => 1,'Users.role_id' => 3)); 

    return $query; 
} 
gelegen schreiben

Hinweis, hier halte ich role_id "1" für Admin und "3" für Front-Benutzer.

Auf diese Weise können Sie auch die Anmeldung für beide im selben Browser als Schlüssel für beide Benutzerarten ist unterschiedlich.

Hoffe das hilft Ihnen, die Struktur entsprechend einzurichten.

+0

https://github.com/dereuromark/cakephp-tinyauth könnte Ihnen helfen, hier eine saubere Konfiguration und mit einfachen Rollen zu halten. – mark

Verwandte Themen