cakephp

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

VN:F [1.9.17_1161]
Rating: 0.0/5 (0 votes cast)
30/09/2010 από
admin

Το συστατικό 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








Απόκρυψη ↑

H ομάδα μας (Χtnd.it group) αποτελείται από ανθρώπους που πιστεύουν πως παρά τα όσα “κακά” έχουμε σαν Έλληνες αν καταφέρουμε και λειτουργήσουμε ομαδικά , χωρίς εγωισμούς & συμφέροντα να μπαίνουν στην μέση, μπορούμε να καταφέρουμε πολλά και μάλιστα να διαπρέψουμε σε παγκόσμιο επίπεδο. Οι περισσότεροι από εμάς βρισκόμαστε χρόνια στην αγορά εργασίας είτε ως υπάλληλοι είτε δουλεύοντας σαν ελεύθεροι επαγγελματίες και πιστεύουμε πως για να ξεκινήσεις να βελτιώνεις κάποια πράγματα η καλύτερη αρχή είναι να επενδύσεις στον τομέα εκπαίδευση.

H Ιστοσελίδα μου

Ακολουθήστε με στο Twitter

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

06 September 2011

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

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

Συνέχεια...

Διαγωνισμός 5 δωρεάν πακέτα φιλοξενίας από την Stigmahost

23 May 2011

Σε συνεργασία με το web design forum, η Stigmahost προσφέρει με κλήρωση σε πέντε τυχερούς, 5 ετήσια πακέτα[...]

Συνέχεια...

JoomlaDay Greece

27 April 2011

Το JoomlaDay Greece 2011 είναι το πρώτο επίσημο event για το Joomla! στην Ελλάδα και μια πραγματική γιορτή για το open source λογισμικό. Μέσα σε 2 ημέρες θα πραγματοποιηθούν[...]

Συνέχεια...




Σχόλια

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

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

 






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



Ετικέτες


 

Εταιρικές Προσφορές

 

Latest posts

 

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




 

Δημοφιλέστερο άρθρο

3d23d2

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

6/09/2011 από
admin

Είστε έτοιμοι; Παρά τις όποιες δυσκολίες συναντήσαμε, τελικά μετά από 1 χρόνο περίπου, καταφέραμε να συγκεντρώσουμε τις δυνάμεις μας και να βάλουμε τις σκέψεις μας στο σωστό μονοπάτι. Ξεκινάμε μια νέα εποχή για τα Ελληνικά δεδομένα. Κοιτάμε μπροστά και οραματίζομαστε το μέλλον με αισιοδοξία σε μία πολύ δύσκολη εποχή! Αν είστε digital artist (web designer. [...]

 
web design forum

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

Английские пословицыДетские пословицыИзвестные пословицыИспанские пословицыКазахские пословицыКитайские пословицыЛатинские пословицыНародные пословицыНемецкие пословицыПословицы ДаляПословицы о БлинахПословицы о ВежливостиПословицы о ВеснеПословицы о ВодеПословицы о ВойнеПословицы о ВоспитанииПословицы о ВремениПословицы о ГрамотеПословицы о Добре и злеПословицы о ДомеПословицы о ДружбеПословицы о ЕдеПословицы о ЖивотныхПословицы о ЖизниПословицы о ЗдоровьеПословицы о ЗемлеПословицы о ЗимеПословицы о КнигахПословицы о ЛениПословицы о ЛюбвиПословицы о МамеПословицы о МасленицеПословицы о МатематикеПословицы о МудростиПословицы о ПриродеПословицы о ПтицахПословицы о РаботеПословицы о РодинеПословицы о Русском языкеПословицы о СемьеПословицы о СолнцеПословицы о СпортеПословицы о СчастьеПословицы о Труде и делеПословицы о ХлебеПословицы о ЧеловекеПословицы о ШколеПословицы о ЯзыкеПословицы об АрмииПословицы С числамиПрикольные пословицыРусские пословицыСмешные пословицыСовременные пословицыТатарские пословицыУкраинские пословицыФранцузские пословицыЯпонские пословицыПословицыЗнайкаБелорусские сказкиКитайские сказкиМадагаскарские сказкиМолдавские сказкиРусские сказкиУкраинские сказкиЦыганские сказкиЯпонские сказкиАлександр Сергеевич ПушкинБратья ГриммГанс Христиан АндерсенДональд БиссетПавел Петрович БажовШарль ПерроЗагадкиРаскраскиРассказы для детейАркадий Петрович ГайдарВиталий БианкиЕвгений ЧарушинИван Соколов-МикитовКонстантин ПаустовскийЛев ТолстойЛеонид ПантелеевМихаил Пришвин