Empfehlungen: Erweiterte Suche

Problem mit User / Admin Konzept

Fragen zur Konzeptionierung und womit man am besten anfäng? Hier rein...

Problem mit User / Admin Konzept

Beitragvon asylum » Di 29. Jun 2010, 10:57

Heya

bin ein Neuling in Sachen CakePHP. Hab das Buch o'Reilly Buch durchgemacht und muss nun eine Applikation erstellen :)

Nun zu meinem Problem:
Es gibt in der App zwei verschiedene Usertypen. Zum einem Mitarbeiter und zum anderen User.
Die Mitarbeiter haben ein Login und koennen in mit ihrem Login neue User erstellen. User koennen sich nicht selber registrieren, es ist also eine "geschlossen" App.
Nun hat der Mitarbeiter natuerlich nen Namen, ne Filiale, ne Telfonnummer und so weiter.
Jeder Mitarbeiter ist dann "verwantwortlich" fuer den User den er erstellt hat, aber nicht zwingend.

Die User haben alle noetigen Profilinformationen (Name, Adresse, Email etc. pp) und haben desweiteren Zugriff auf eine Liste, die sie bearbeiten koennen etc.
Sowas wie ne Amazon Wishlist. Der Mitarbeiter erstellt einen neuen User und kann auch gleich einige Items in die Wunschliste packen. Der User kann sich dann einloggen und seine Liste aendern oder neue Items hinzufuegen.

Fuer mich ist nun das grosse Problem wie ich nun am besten mit den verschiedenen User Models vorgehe.
Mache ich das mit ACL?
Mache ich das mit zwei verschiedenen Models und zwei getrennten Logins?

So gesehen braeuchte ich n "Adminbereich" und nen normalen "Userbereich", wobei die Informationen von User nicht gleich der der Admins ist.

Koennt ihr mir da auf die spruegen helfen?

Danke!

lg
asylum
Benutzeravatar
asylum
 
Beiträge: 3
Registriert: Di 29. Jun 2010, 10:49

Re: Problem mit User / Admin Konzept

Beitragvon Flo » Di 29. Jun 2010, 13:18

der einfachheit halber würde ich Groups vorschlagen...
User belongsTo Group...
darüber kannste dann zugriffsreichte regeln.

von ACL hab ich leider nicht wirklich Ahnung ;)
Flo
 
Beiträge: 85
Registriert: Mi 11. Jun 2008, 20:48
Wohnort: Bielefeld
CakePHP-Version: 1.3
OS: Mac OSX 10.6

Re: Problem mit User / Admin Konzept

Beitragvon asylum » Di 29. Jun 2010, 13:25

Danke fuer deine schnelle Antwort!

Also meinst du, dass ich einmal das Model User habe. Und das Model kann dann zu zwei Gruppen gehoeren?

Also User belongsTo Mitarbeiter und User belongsTo Kunden (als Beispiel)?

lg
Benutzeravatar
asylum
 
Beiträge: 3
Registriert: Di 29. Jun 2010, 10:49

Re: Problem mit User / Admin Konzept

Beitragvon mbrod » Di 29. Jun 2010, 22:23

Also ich verstehe es anders: Im Model User gibt es ein Feld group. Die Gruppenzugehörigkeit ist dann entscheidend, ob bestimmte Aktionen erlaubt sind oder nicht.
Beispiel für einen Controller, der nur mit "Adminrechten" ausgeführt wird:
Code: Alles auswählen
    function isAuthorized(){
        if($this->Auth->user('group')=='admin'){return true;}
        return false;
    }
 

Im O'Reilly Buch sind auf den Seiten 308 und 309 (1. Auflage 2008 1. korrigierter Nachdruck 2009) etwas ausgefeiltere Beispiele gegeben, wie man den Zugriff auf bestimmte Aktionen steuern kann.

Noch hatte ich nicht die Anforderung an komplexe Zugriffsrechte, sodass ich mich bisher auch vor ACL gedrückt habe.
mbrod
 
Beiträge: 193
Registriert: Mi 20. Mai 2009, 18:09
Wohnort: Frankfurt am Main
CakePHP-Version: 1.3.8
OS: Mac OS X

Re: Problem mit User / Admin Konzept

Beitragvon asylum » Di 29. Jun 2010, 22:35

danke mbrod,

dh also ich habe nur ein User Model?

Momentan hab ich sowas:

Employee belongsTo Branch
Branch hasMany Employees

User steht (im moment) alleine, wird aber nachher auch Abhaenigkeiten haben, die Employee nicht hat (bzw nicht braucht)

Wie loest man sowas am besten?

Also konkret: wie kann ein Model unterschiedliche Assoziationen haben?
Benutzeravatar
asylum
 
Beiträge: 3
Registriert: Di 29. Jun 2010, 10:49

Re: Problem mit User / Admin Konzept

Beitragvon mbrod » Mi 30. Jun 2010, 23:09

Also unter User verstehe ich immer die Benutzer, die Zugang zu der Applikation über einen Login-Vorgang haben. Meist ist das User-Model ohne Beziehung zu den anderen Models der Applikation. Über das Feld group werden die Berechtigungen für die Applikation gesteuert. So wird ein User ja auch im O'Reilly Buch behandelt.

Dies weicht also ziemlich von der Beschreibung deines Users oben ab, der mir eher so etwas wie ein Kunde zu sein scheint. Aber ich kann mir zu wenig vorstellen, wie die Geschäftslogik deiner Applikation aussehen soll.
mbrod
 
Beiträge: 193
Registriert: Mi 20. Mai 2009, 18:09
Wohnort: Frankfurt am Main
CakePHP-Version: 1.3.8
OS: Mac OS X

Re: Problem mit User / Admin Konzept

Beitragvon Flo » Fr 2. Jul 2010, 12:09

Gibt mehrere Möglichkeiten, die unterschiedlich kompliziert sind...

User belongsTo Group
Code: Alles auswählen

CREATE TABLE IF NOT EXISTS users
(
id INT(11) AUTO_INCREMENT,
group_id INT(11),
username VARCHAR(255),
passwd VARCHAR(255),
created DATETIME,
updated DATETIME,
PRIMARY KEY (id)
) ENGINE=MyISAM;

CREATE TABLE IF NOT EXISTS groups
(
id INT(11) AUTO_INCREMENT,
name VARCHAR(255),
created DATETIME,
updated DATETIME,
PRIMARY KEY (id)
) ENGINE=MyISAM;
 

dann könnte man das um Permissions erweitern, datenbankgesteuert, oder für jede Action im Controller einzeln (wie gesagt, ich mag ACL nicht ;) )

Component:
Code: Alles auswählen

<?php
class Permission extends Object {
    function access($groups = array()) {
        // Wenn ich eingeloggt bin und eine Gruppe habe
        // Wenn meine Gruppe in den erlaubten Gruppen enthalten ist...
        if ($this->Session->check('User.group_id') &amp;&amp; in_array($this->Session->read('User.group_id'),$groups)) {
            return true;
        }
        return false;
    }
}
?>
 


AppController:
Code: Alles auswählen
<?php
// Die Component für die komplette App verfügbar machen
class AppController extends Controller {
    public $components = array('Permission');
}
?>

Beispiel:
Code: Alles auswählen
<?php
class UsersController extends AppController {
    public $name = 'Users';
   
    function admin_index()
    {
        // Zugriff für Gruppen 1 &amp; 2
        if ($this->Permission->access(array(1,2))) {
            // do some stuff
        } else {
            // do some stuff
        }
    }
}
?>
Flo
 
Beiträge: 85
Registriert: Mi 11. Jun 2008, 20:48
Wohnort: Bielefeld
CakePHP-Version: 1.3
OS: Mac OSX 10.6

Re: Problem mit User / Admin Konzept

Beitragvon Molekül » Sa 3. Jul 2010, 13:16

Ich löse die Access-Kontrolle so:

app_controller.php
Code: Alles auswählen
public function beforeFilter(){
    if(isset($this->Auth)){
        parent::beforeFilter();
        // Setup User
        $this->User->contain('Group');
        if($this->Auth->User('id') != false){
            $auth = $this->User->read(null,$this->Auth->User('id'));
        }else{
            // login user as guest
        }
        $this->set('auth',$auth); // enthält Username etc für Darstellung in default.ctp o.ä.
        // Access control
        $this->Auth->allowedActions = array('logout','login');
        $this->Auth->authorize = 'controller';
    }
}
 
function isAuthorized(){
    // actions that are always allowed
    if($this->action == 'display'){
        return true;
    }
    // access control array
    $allowedActions = array(
         'model name' => array('action name' => array('group ids with access'))
        ,'model name' => array('action name' => array('group ids with access'))
    );
    // check if access allowed -> return true or false
    if(isset($allowedActions[low($this->name)])){
        $controllerActions = $allowedActions[low($this->name)];
        if(isset($controllerActions[$this->action])
                &amp;&amp; in_array($this->Auth->user('group_id'),$controllerActions[$this->action])){
            return true;
        }
        return false;
    }
}
}
 


Letztlich steht die gesamte Zugriffskontrolle im Array $allowedActions, das sich meiner Ansicht nach sehr übersichtlich strukturieren lässt, vor allem wenn die meisten Kontroller die selben Zugriffsrechte haben, z.B. view alle Gruppen, add und edit nur ein Teil der Gruppen und delete nur die Admin Gruppe - dann lässt sich das entsprechend in unter-arrays auslagern.
Molekül
 
Beiträge: 27
Registriert: Fr 25. Sep 2009, 09:45
CakePHP-Version: 3.x


Zurück zu Konzeption und Vorgehensweise

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron