Ξεκινήστε το ACL στο CakePHP

VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)
FavoriteLoadingΠροσθήκη στα Αγαπημένα μου
30/09/2010 από
root

Το συστατικό ACL που συνοδεύει το CakePHP μπορεί να αποθαρρύνει τους νέους χρήστες του CakePHP ή του ACL.

Μόλις πάρετε την απόφαση να ασχοληθείτε με αυτό το συστατικό του CakePHP δεν θα θέλετε να επιστρέψετε με τίποτα ξανά πίσω. Η ευελιξία και η δύναμη του ACL αξίζουν να εγκατασταθούν στο site σας.

Το ACL ή Access Control List είναι μια κοινή έννοια για τον έλεγχο της πρόσβασης σε προγράμματα και ιστοσελίδες σε πολύ χαμηλό επίπεδο. Η βασική αρχή είναι απλή, έχετε τα “ποιος” και τα “τι”. Ο συνδυασμός αυτών τον δυο προσδιορίζει “ποιος” μπορεί να προσπελάσει “τι”.

Γιατί να χρησιμοποιήσετε το ACL;

Αν θέλετε η πρόσβαση στο site σας να μην είναι της μορφής “πρόσβαση σε όλα ή σε τίποτα” τότε θα πρέπει να χρησιμοποιήσετε το ACL. Το ACL σας επιτρέπει να ορίζετε ποιοι χρήστες θα έχουν πρόσβαση σε τι.

Πως να ξεκινήσετε με το ACL;

Πολλοί πιστεύουν πως δεν μπορεί το ACL να λειτουργήσει χωρίς το συστατικό Auth του CakePHP. Παρόλο που λειτουργούν άψογα το ένα με το άλλο, η χρήση του ACL δεν απαιτεί την ταυτόχρονη χρήση του Auth. Για να σας το αποδείξω, ομολογώ πως εγώ δεν χρησιμοποιώ καθόλου το Auth. Στην πραγματικότητα έχω αναπτύξει ένα αρκετά ισχυρό μοντέλο χρήστη που χειρίζεται της άδειες πρόσβασης, την εγγραφή, κ.α.

Απλά να θυμάστε πως το ACL ορίζει ποιος μπορεί να κάνει τι και το Auth ορίζει πως οι χρήστες μπαίνουν στο σύστημα.

Τα βασικά του ACL

Αρχικά σας προτείνω να ρίξετε μια ματιά στην ενότητα ACL στο εγχειρίδιο χρήσης του CakePHP. Αν μπορείτε να ανεχθείτε όλη την αναφορά στον Άρχοντα του δακτυλιδιού, θα μπορέσετε να βρείτε και τις πληροφορίες που ψάχνετε. Απλά να θυμάστε πως χρειάζεστε τη μέθοδο της βάσης δεδομένων όπως είναι στο αρχείο ini.

Αναβαθμίστε ένα υπάρχον site σε ACL

Για αρχή πάρτε μια σελίδα χαρτί. Σκεφτείτε το λίγο. Τα ποιος και τα τι στην ιστοσελίδα σας. Ένα απλό παράδειγμα μπορεί να μοιάζει κάπως έτσι.

Τα ποιος

Κρατήστε το απλό, έχουμε χρήστες και διαχειριστές.

[1] Χρήστες	[4] Νίκος	[5] Μαρία	[6] Σοφία[2] Διαχειριστές	[3] Νίκος

Τα τι

Σε αυτή την ενότητα θα πρέπει να αφιερώσετε λίγο χρόνο παραπάνω για τη σχεδίαση. Σκεφτείτε για τα κοινά σημεία σε όλα τα μοντέλα ή της περιοχές της ιστοσελίδας σας.

[1] Ολόκληρο το site	[2] Βασικά μοντέλα		[4] Χρήστες		[5] Εργαλειοθήκες		[6] Αντικείμενα	[3] Βοηθητικά μοντέλα		[7] Ενέργειες		[8] Προτεραιότητες		[9] Ρυθμίσεις		[10] Έλεγχοι Robots

Το κλειδί στο παράδειγμα είναι πως οι χρήστες θα πρέπει να μπορούν να δημιουργούν και να διαβάζουν στιγμιότυπα από τα βασικά μοντέλα, αλλά να μπορούν μόνο να διαβάζουν τα βοηθητικά μοντέλα.

Ο κώδικας τώρα που θα τα συνδυάσει όλα – acos, aros και aros_acos

Αυτός είναι ένας απλός ελεγκτής για την υλοποίηση του ACL για ένα από τα site μου. Τα βήματα που γίνονται είναι τα ακόλουθα :

  • Αρχικοποίηση των πινάκων με την ενέργεια initAcl
  • Στη συνέχεια αντιστοιχεί δικαιώματα (συνδέει τα ποιος με τα τι)
  • Στο τέλος κάνει δοκιμές για τα δικαιώματα
<?php

 class AclprepController extends AppController
{
      var $name = 'Aclprep';
      var $uses =array('User');
      var $components =array('Acl');

function initAcl()
{
	//Αρχικά
      /*
      * δημιουργήστε τους πίνακες στη βάση δεδομένων με την εκτέλεση του
	* cake schema run create DbAcl
      */

	/*
	* Ορίζουμε της βασικές ομάδες χρηστών, για να το διατηρήσουμε απλό
	* έχω ορίσει μόνο χρήστες και διαχειριστές
      */

	//always declare an Aro object to create and save
	// Να δημιουργείται πάντα ένα αντικείμενο Aro για δημιουργία και αποθήκευση
	$aro = new Aro();

	// Κάντε επανάλυψη ανάμεσα στισ ομάδες για να τις βάλετε στον πίνακα aro
      $groups = array(
		0 => array(
            	'alias' => 'users'
            ),
            1 => array(
			'alias' => 'administrators'
		),
	);

	// Επαναλάβετε και δημιουργήστε της ομάδες στο ARO
	foreach($groups as $data)
	{
		// Θυμηθείτε να καλέσετε τη μέθοδο create() όταν αποθηκεύεται σε απαναλύψεις
            $aro->create();

		// Αποθηκεύστε τα δεδομένα
            $aro->save($data);
	}

	/*
	* Στη συνέχεια προσθέτουμε τους χρήστες μας στην ομάδα users
      */

	$aro = new Aro();

	// Δημιουργήστε μια λίστα με όλους τους χρήστες στη βάση δεδομένων σας
      $users=$this->User->find('list');

	debug($users);

	$i=0;

	foreach($users as $key=>$value)
	{
		$aroList[$i++]=array(
			'alias' => $value,
                  'parent_id' => 1,
                  'model' => 'User',
			'foreign_key' => $key,
		);
	}

	// Κάντε μια εκτύπωση στην οθόνη για να επιβεβαιώσετε τη δομή
	debug($aroList);

	// Και τώρα αποθηκεύουμε
      foreach($aroList as $data)
	{
		// Ξανά. Θυμηθείτε να καλέσετε τη μέθοδο create μέσα σε επαναλύψεις
            $aro->create();

		// Αποθηκεύστε τα δεδομένα
            $aro->save($data);
	}

	/*
	* Τώρα στο τι μπορούν να προσπελάσουν.
      * Για τη δική μου δομή έχω όλο το site σαν γωνέα και δυο υπό-μοντέλα που 	* περιέχουν όλα τα άλλα μοντέλα.
      */

	$aco = new Aco();

	// Οι διαχειριστές μπορούν να προσπελάσουν όλο το site
      $controllers = array(
		0 => array(
			'alias' => 'Entire_Site'
		),
	);

	// Σαρώστε τους controllers και δημιουργήστε ομάδες στο ARO
      foreach($controllers as $data)
	{
            $aco->create();

            $aco->save($data);
	}

	$aco = new Aco();

	// Οι χρήστες έχουν διαφορετικά δικαιώματα πρόσβασης στο Βασικό μοντέλο 	// και το Βοηθητικό μοντέλο
      $controllers = array(
		0 => array(
            	'alias' => 'Main_Models',
                  'parent_id'=> '1'
		),
            1 => array(
			'alias' => 'Aux_Models',
                  'parent_id'=> '1'
		),
	);

	// Σαρώστε τους Controllers και δημιοργήστε αντικείμενα ACO
      foreach($controllers as $data)
      {
            $aco->create();

            $aco->save($data);
	}

      $aco = new Aco();

	// Έχουμε βάλει όλα τα υπό-ACO μέσα σε ένα πίνακα για να τα σκανάρουμε 	// αργότερα και να τα αποθηκεύσουμε
	$controllers = array(
		0 => array(
            	'alias' => 'Users',
                  'model' => 'User',
                  'parent_id' => 2,
		),
            1 => array(
			'alias' => 'Toolboxes',
                  'model' => 'Toolbox',
                  'parent_id' => 2,
		),
            2 => array(
			'alias' => 'Items',
                  'model' => 'Item',
                  'parent_id' => 2,
		),
            3 => array(
			'alias' => 'Actions',
                  'model' => 'Action',
                  'parent_id' => 3,
		),
            4 => array(
			'alias' => 'Priorities',
                  'model' => 'Priority',
                  'parent_id' => 3,
		),
            5 => array(
            	'alias' => 'Settings',
                  'model' => 'Setting',
                  'parent_id' => 3,
		),
            6 => array(
            	'alias' => 'Botchecks',
                  'model' => 'Botcheck',
                  'parent_id' => 3,
		),
	);

	// Σαρώστε όλους τους Controllers και δημιουργήστε κόμβους ACO
      foreach($controllers as $data)
      {
            $aco->create();

            $aco->save($data);
	}

	die;
	exit;
}

function assignPermissions()
{
	// Δίνει στον διαχειριστή δικαιώματα να κάνει τα πάντα (κοριφαίο ACO)
      $this->Acl->allow('administrators', 'Entire_Site');

	// Δίνει στους χρήστες το δικαίωμα να διαβάσουν το βασικό μοντέλο
	// να αναβαθμίσουν και να διαγράψουν τα δικά τους δεδομένα.

	$this->Acl->allow('users', 'Main_Models','create');
	$this->Acl->allow('users', 'Main_Models','read');

	// Επίσης παραχωρεί στους χρήστες το δικαίωμα ανάγνωσης από το βοηθητικό μοντέλο
	$this->Acl->allow('users', 'Aux_Models','read');

	die('done');
}

function checkPermissions()
{
	// Όλα από τα παρακάτω επιστρέφουν true
	echo $this->Acl->check('administrators', 'Settings');
      echo $this->Acl->check('users', 'Items','create');
      echo $this->Acl->check('users', 'Actions','read');

	// Να θυμάστε ότι μπορούμε να χρησιμοποιήσουμε το συντακτικό
	// model/foreign key για τους χρήστες μας στο ARO
	//
      // Σκεφτείτε αν μπορεί ο   να προσπελάσει  ,
      // Μπορεί το μοντέλο User ο χρήστης 2356 να προσπελάσει το Weapons
      // $this->Acl->check(array('model' => 'User', 'foreign_key' => 2356), 'Weapons');

	echo 'and dissallows...';

	// Τα ακόλουθα επιστρέφουν false
	// Ο χρήστης δεν μπορεί να διαγράψει ή να επεξεργαστεί θα βοηθητικά
	// μοντέλα
      echo $this->Acl->check('users', 'Actions', 'delete');
      echo $this->Acl->check('users', 'Actions', 'create');

	// Ούτε μπορούν να επεξεργαστούν ή να διαγράψουν τα βασικά μοντέλα άλλων
      echo $this->Acl->check('users', 'Items', 'delete');
      echo $this->Acl->check('users', 'Items', 'update');
      die('done');
}

}

?>

Οι τελικές πινελιές

Οι τελικές πινελιές θα γίνουν ενώ αναβαθμίζετε ή δημιουργείται νέες ενέργειες για τα μοντέλα σας. Όταν για παράδειγμα ο χρήστης δημιουργεί μια νέα εργαλειοθήκη, άμεσα θα παραχωρείτε σε αυτό το χρήστη το δικαίωμα να αναβαθμίζει και να διαγράφει αυτή την εργαλειοθήκη.

//example code when a user creates a model//let user with id 1234 update toolbox with id 5678$this->Acl->allow(array('model' => 'User', 'foreign_key' => 1234), array('model'=>'Toolbox','foreign_key'=>'5678'), 'update');

Έτσι την επόμενη φορά θα μπορείτε να κάνετε έλεγχο αν ο χρήστης έχει δικαίωμα να κάνει αλλαγές πάνω σε αυτή την εργαλειοθήκη.

//example code when a user attempts action a model//can user with id 1234 in fact update toolbox with id 5678?$this->Acl->check(array('model' => 'User', 'foreign_key' => 1234), array('model'=>'Toolbox','foreign_key'=>'5678'), 'update');

πηγή: Web Resources








Hide ↑

extend your possibilities!! xtnd.it

Follow Web Design Forum on Twitter ,

Οδηγός επιβίωσης WordPress για αρχάριους

25 October 2012

                    Ξεκινήσετε το wordpress blog σας μέσα σε λίγα λεπτά!

Read more...

Διαγωνισμός: 5 πακέτα Web Hosting από την StigmaHost

16 October 2012

Με ενθουσιασμό σας ανακοινώνουμε ότι η StigmaHost σας προσφέρει την ευκαιρία[…]

Read more...

Ελληνική Σειρά Εκμάθησης JavaScript (Video Tutorials)

21 September 2012

Η Σειρά περιλαμβάνει τα εξής Μαθήματα:

JavaScript – 1 : Λίγα[…]

Read more...






Σχόλια

Δεν υπάρχουν σχόλια ακόμα.

Αφήστε ένα σχόλιο

 






RSS για τα σχόλια σε αυτό το άρθρο.  |  TrackBack URL



 
 
 

Eταιρείες παροχής υπηρεσιών διαδικτύου




 

Το Όραμά Μας

3d2 3d2

Η νέα εποχή ξεκινάει…

Είστε έτοιμοι;

Παρά τις όποιες δυσκολίες συναντήσαμε, τελικά μετά από 1 χρόνο περίπου, καταφέραμε να συγκεντρώσουμε τις δυνάμεις μας και να βάλουμε τις σκέψεις μας στο σωστό μονοπάτι.

Ξεκινάμε μια νέα εποχή για τα Ελληνικά δεδομένα. Κοιτάμε μπροστά και οραματίζομαστε το μέλλον με αισιοδοξία σε μία πολύ δύσκολη εποχή!

Αν είστε digital artist (web designer. web developer, programmer, 3d animator, graphic designer κτλ)  δώστε λίγα λεπτά από τον χρόνο σας να διαβάσετε το παρακάτω άρθρο. Σίγουρα σας ενδιαφέρει

 
web design forum

  • Προσεγγίστε νέους αναγνώστες και φίλους
  • Αποκτήστε το δικαίωμα να προωθήστε την σελίδα σας μέσω διαφημιστικών banner στο web design forum
  • Αποκτήστε συνδέσμους και backlinks δωρεάν
  • Αυτόματη προωθηση του άρθρου σας, σε διάφορες ιστοσελίδες κοινωνικής δικτύωσης.