SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Downloaden Sie, um offline zu lesen
a simpler approach
   ACL stands for Access Control List
   Used for Authorization purpose (eg: who
    access what)
   Zend, CakePHP features ACL as key
    component of their framework
   What about CodeIgniter?
   Using our custom control check
function loadPage($pageID)
{
  if($_SESSION[„userType‟] != “member”)
  {
     die(“you do not have access to this page”);
  }
}
   And the check goes on & on, Hard coded in
    our controller files…..
   What is this hook?
    ◦ a means to tap into and modify the inner workings
      of the framework without hacking the core files
    ◦ Have you heard of wordpress or mediawiki hook?
    ◦ Examples:
      We want to execute a functionality before controllers
       are loaded
   Hooks must be enabled in CodeIgniter Config file
    $config['enable_hooks'] = True;
   Hooks are defined in
    application/config/hooks.php file. Each hook is
    specified as a part of a global array named $hook

$hook[„Hook_Point‟] = array(
                     'class' => 'MyClass',
                     'function' => 'Myfunction',
                     'filename' => 'Myclass.php',
                     'filepath' => 'hooks',
                     'params' => array()
                     );
   pre_system
    Called very early during system execution. Only the
    benchmark and hooks class have been loaded at this
    point. No routing or other processes have happened.
   pre_controller
    Called immediately prior to any of your controllers
    being called. All base classes, routing, and security
    checks have been done.
   post_controller_constructor
    Called immediately after your controller is
    instantiated, but prior to any method calls happening.
   post_controller
    Called immediately after your controller is fully
    executed.
   class The name of the class you wish to invoke. If you
    prefer to use a procedural function instead of a class,
    leave this item blank.
   function The function name you wish to call.
   filename The file name containing your class/function.
   filepath The name of the directory containing your script.
    Note: Your script must be located in a directory INSIDE
    your application folder, so the file path is relative to that
    folder. For example, if your script is located in
    application/hooks, you will simply use hooks as your
    filepath. If your script is located in
    application/hooks/utilities you will use hooks/utilities as
    your filepath. No trailing slash.
   params Any parameters you wish to pass to your script.
    This item is optional.
/* application/config/hooks.php */

$hook['pre_controller'] = array(
                    'class' => 'Accesscheck',
                    'function' => 'index',
                    'filename' => 'accesscheck.php',
                    'filepath' => 'hooks');
class Accesscheck
{
   public function index($params)
   {
        require_once('permissions.php');
        $baseURL = $GLOBALS['CFG']->config['base_url'];
        $routing =& load_class('Router');
        $class = $routing->fetch_class();
        $method = $routing->fetch_method();
if(! empty($doesNotRequireLogin[$class][$method])) { return true; }
else {
           if(! $_SESSION['userType']) {     //checking authentication
                    header("location: {$baseURL}common/login"); exit;
           }
           else {

if(empty($permissions[$_SESSION['userType']][$class][$method])
                 ||
$permissions[$_SESSION['userType']][$class][$method]!=true) {

                     header("location: {$baseURL}common/unauthorized");
exit;
                     } else {
                            return true;
                     }
                 }
        }
            header("location: {$baseURL}common/unauthorized");
<?php
$doesNotRequireLogin = array();
$permissions = array();
$doesNotRequireLogin['common']['index'] = true;
$doesNotRequireLogin['common']['login'] = true;
$doesNotRequireLogin['common']['dologin'] = true;
$doesNotRequireLogin['common']['unauthorized'] = true;
$doesNotRequireLogin['common']['message'] = true;
$doesNotRequireLogin['common']['forgotpassword'] = true;
$permissions[„member‟][„blog'][„post‟] = true;
$permissions[„member‟][„blog'][„view‟] = true;
$permissions[„member‟][„blog'][„save‟] = true;
$permissions[„member‟][„blog'][„rating‟] = true;
$permissions[„guest‟][„blog'][„view‟] = true;
   We have eliminated the process of writing the
    authorization code on each controller
    functions
   We have a better authorized application
   We have a central access point with
    permissions and check.
   We have used Array for better performance
    (you can use XML though)
   This solution is better suited for role based
    access as well as dynamic role option.
   ACL as a Library
    ◦ There are few libraries available from CodeIgniter
      wiki page and other sources which can be used for
      ACL purpose.
M. MIZANUR RAHMAN
          Founder & C.T.O
  Informatix Technologies
[mizan@informatixbd.com]

Weitere ähnliche Inhalte

Was ist angesagt?

Αυτοματοποίηση της μετατροπής των HR επιχειρησιακών διαδικασιών εταιριών σε W...
Αυτοματοποίηση της μετατροπής των HR επιχειρησιακών διαδικασιών εταιριών σε W...Αυτοματοποίηση της μετατροπής των HR επιχειρησιακών διαδικασιών εταιριών σε W...
Αυτοματοποίηση της μετατροπής των HR επιχειρησιακών διαδικασιών εταιριών σε W...
ISSEL
 

Was ist angesagt? (20)

Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
 
jQuery Fundamentals
jQuery FundamentalsjQuery Fundamentals
jQuery Fundamentals
 
Object oreinted php | OOPs
Object oreinted php | OOPsObject oreinted php | OOPs
Object oreinted php | OOPs
 
Nuxt.JS Introdruction
Nuxt.JS IntrodructionNuxt.JS Introdruction
Nuxt.JS Introdruction
 
Spring I/O 2012: Natural Templating in Spring MVC with Thymeleaf
Spring I/O 2012: Natural Templating in Spring MVC with ThymeleafSpring I/O 2012: Natural Templating in Spring MVC with Thymeleaf
Spring I/O 2012: Natural Templating in Spring MVC with Thymeleaf
 
Αυτοματοποίηση της μετατροπής των HR επιχειρησιακών διαδικασιών εταιριών σε W...
Αυτοματοποίηση της μετατροπής των HR επιχειρησιακών διαδικασιών εταιριών σε W...Αυτοματοποίηση της μετατροπής των HR επιχειρησιακών διαδικασιών εταιριών σε W...
Αυτοματοποίηση της μετατροπής των HR επιχειρησιακών διαδικασιών εταιριών σε W...
 
Functional and Event Driven - another approach to domain modeling
Functional and Event Driven - another approach to domain modelingFunctional and Event Driven - another approach to domain modeling
Functional and Event Driven - another approach to domain modeling
 
Grep
GrepGrep
Grep
 
Android binder-ipc
Android binder-ipcAndroid binder-ipc
Android binder-ipc
 
ASP.NET Routing & MVC
ASP.NET Routing & MVCASP.NET Routing & MVC
ASP.NET Routing & MVC
 
Django Architecture Introduction
Django Architecture IntroductionDjango Architecture Introduction
Django Architecture Introduction
 
AngularJS for Beginners
AngularJS for BeginnersAngularJS for Beginners
AngularJS for Beginners
 
실무자가 말하는 모의해킹
실무자가 말하는 모의해킹실무자가 말하는 모의해킹
실무자가 말하는 모의해킹
 
SOLID PRINCIPLES
SOLID PRINCIPLESSOLID PRINCIPLES
SOLID PRINCIPLES
 
PHP MVC
PHP MVCPHP MVC
PHP MVC
 
Advanced Object-Oriented/SOLID Principles
Advanced Object-Oriented/SOLID PrinciplesAdvanced Object-Oriented/SOLID Principles
Advanced Object-Oriented/SOLID Principles
 
Jwt == insecurity?
Jwt == insecurity?Jwt == insecurity?
Jwt == insecurity?
 
oracle-reports6i
oracle-reports6ioracle-reports6i
oracle-reports6i
 
OSGi, Scripting and REST, Building Webapps With Apache Sling
OSGi, Scripting and REST, Building Webapps With Apache SlingOSGi, Scripting and REST, Building Webapps With Apache Sling
OSGi, Scripting and REST, Building Webapps With Apache Sling
 
jQuery
jQueryjQuery
jQuery
 

Andere mochten auch

The Agile Process - Taming Your Process To Work For You
The Agile Process - Taming Your Process To Work For YouThe Agile Process - Taming Your Process To Work For You
The Agile Process - Taming Your Process To Work For You
Nowell Strite
 
Embracing Distributed Version Control
Embracing Distributed Version ControlEmbracing Distributed Version Control
Embracing Distributed Version Control
Nowell Strite
 
RESTful API Design & Implementation with CodeIgniter PHP Framework
RESTful API Design & Implementation with CodeIgniter PHP FrameworkRESTful API Design & Implementation with CodeIgniter PHP Framework
RESTful API Design & Implementation with CodeIgniter PHP Framework
Bo-Yi Wu
 

Andere mochten auch (8)

PHP & MVC
PHP & MVCPHP & MVC
PHP & MVC
 
CodeIgniter - PHP MVC Framework by silicongulf.com
CodeIgniter - PHP MVC Framework by silicongulf.comCodeIgniter - PHP MVC Framework by silicongulf.com
CodeIgniter - PHP MVC Framework by silicongulf.com
 
The Agile Process - Taming Your Process To Work For You
The Agile Process - Taming Your Process To Work For YouThe Agile Process - Taming Your Process To Work For You
The Agile Process - Taming Your Process To Work For You
 
Introduction To CodeIgniter
Introduction To CodeIgniterIntroduction To CodeIgniter
Introduction To CodeIgniter
 
Embracing Distributed Version Control
Embracing Distributed Version ControlEmbracing Distributed Version Control
Embracing Distributed Version Control
 
Djangocon 09 Presentation - Pluggable Applications
Djangocon 09 Presentation - Pluggable ApplicationsDjangocon 09 Presentation - Pluggable Applications
Djangocon 09 Presentation - Pluggable Applications
 
RESTful API Design & Implementation with CodeIgniter PHP Framework
RESTful API Design & Implementation with CodeIgniter PHP FrameworkRESTful API Design & Implementation with CodeIgniter PHP Framework
RESTful API Design & Implementation with CodeIgniter PHP Framework
 
Introduction to Python
Introduction to PythonIntroduction to Python
Introduction to Python
 

Ähnlich wie ACL in CodeIgniter

What mom never told you about bundle configurations - Symfony Live Paris 2012
What mom never told you about bundle configurations - Symfony Live Paris 2012What mom never told you about bundle configurations - Symfony Live Paris 2012
What mom never told you about bundle configurations - Symfony Live Paris 2012
D
 
Aura Project for PHP
Aura Project for PHPAura Project for PHP
Aura Project for PHP
Hari K T
 
symfony on action - WebTech 207
symfony on action - WebTech 207symfony on action - WebTech 207
symfony on action - WebTech 207
patter
 
Phpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsPhpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friends
Michael Peacock
 

Ähnlich wie ACL in CodeIgniter (20)

Advanced symfony Techniques
Advanced symfony TechniquesAdvanced symfony Techniques
Advanced symfony Techniques
 
Best Practices in Plugin Development (WordCamp Seattle)
Best Practices in Plugin Development (WordCamp Seattle)Best Practices in Plugin Development (WordCamp Seattle)
Best Practices in Plugin Development (WordCamp Seattle)
 
Building Lithium Apps
Building Lithium AppsBuilding Lithium Apps
Building Lithium Apps
 
What mom never told you about bundle configurations - Symfony Live Paris 2012
What mom never told you about bundle configurations - Symfony Live Paris 2012What mom never told you about bundle configurations - Symfony Live Paris 2012
What mom never told you about bundle configurations - Symfony Live Paris 2012
 
関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい
 
The Zen of Lithium
The Zen of LithiumThe Zen of Lithium
The Zen of Lithium
 
Unit testing after Zend Framework 1.8
Unit testing after Zend Framework 1.8Unit testing after Zend Framework 1.8
Unit testing after Zend Framework 1.8
 
Using Geeklog as a Web Application Framework
Using Geeklog as a Web Application FrameworkUsing Geeklog as a Web Application Framework
Using Geeklog as a Web Application Framework
 
Codeigniter : Two Step View - Concept Implementation
Codeigniter : Two Step View - Concept ImplementationCodeigniter : Two Step View - Concept Implementation
Codeigniter : Two Step View - Concept Implementation
 
Apostrophe (improved Paris edition)
Apostrophe (improved Paris edition)Apostrophe (improved Paris edition)
Apostrophe (improved Paris edition)
 
Aura Project for PHP
Aura Project for PHPAura Project for PHP
Aura Project for PHP
 
The State of Lithium
The State of LithiumThe State of Lithium
The State of Lithium
 
Workshop quality assurance for php projects - ZendCon 2013
Workshop quality assurance for php projects - ZendCon 2013Workshop quality assurance for php projects - ZendCon 2013
Workshop quality assurance for php projects - ZendCon 2013
 
Easy rest service using PHP reflection api
Easy rest service using PHP reflection apiEasy rest service using PHP reflection api
Easy rest service using PHP reflection api
 
Symfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technologySymfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technology
 
CodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkCodeIgniter PHP MVC Framework
CodeIgniter PHP MVC Framework
 
Workshop quality assurance for php projects - phpbelfast
Workshop quality assurance for php projects - phpbelfastWorkshop quality assurance for php projects - phpbelfast
Workshop quality assurance for php projects - phpbelfast
 
symfony on action - WebTech 207
symfony on action - WebTech 207symfony on action - WebTech 207
symfony on action - WebTech 207
 
Phpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsPhpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friends
 
Rails is not just Ruby
Rails is not just RubyRails is not just Ruby
Rails is not just Ruby
 

ACL in CodeIgniter

  • 2. ACL stands for Access Control List  Used for Authorization purpose (eg: who access what)  Zend, CakePHP features ACL as key component of their framework  What about CodeIgniter?
  • 3.
  • 4. Using our custom control check function loadPage($pageID) { if($_SESSION[„userType‟] != “member”) { die(“you do not have access to this page”); } }  And the check goes on & on, Hard coded in our controller files…..
  • 5. What is this hook? ◦ a means to tap into and modify the inner workings of the framework without hacking the core files ◦ Have you heard of wordpress or mediawiki hook? ◦ Examples:  We want to execute a functionality before controllers are loaded
  • 6. Hooks must be enabled in CodeIgniter Config file $config['enable_hooks'] = True;  Hooks are defined in application/config/hooks.php file. Each hook is specified as a part of a global array named $hook $hook[„Hook_Point‟] = array( 'class' => 'MyClass', 'function' => 'Myfunction', 'filename' => 'Myclass.php', 'filepath' => 'hooks', 'params' => array() );
  • 7. pre_system Called very early during system execution. Only the benchmark and hooks class have been loaded at this point. No routing or other processes have happened.  pre_controller Called immediately prior to any of your controllers being called. All base classes, routing, and security checks have been done.  post_controller_constructor Called immediately after your controller is instantiated, but prior to any method calls happening.  post_controller Called immediately after your controller is fully executed.
  • 8. class The name of the class you wish to invoke. If you prefer to use a procedural function instead of a class, leave this item blank.  function The function name you wish to call.  filename The file name containing your class/function.  filepath The name of the directory containing your script. Note: Your script must be located in a directory INSIDE your application folder, so the file path is relative to that folder. For example, if your script is located in application/hooks, you will simply use hooks as your filepath. If your script is located in application/hooks/utilities you will use hooks/utilities as your filepath. No trailing slash.  params Any parameters you wish to pass to your script. This item is optional.
  • 9. /* application/config/hooks.php */ $hook['pre_controller'] = array( 'class' => 'Accesscheck', 'function' => 'index', 'filename' => 'accesscheck.php', 'filepath' => 'hooks');
  • 10. class Accesscheck { public function index($params) { require_once('permissions.php'); $baseURL = $GLOBALS['CFG']->config['base_url']; $routing =& load_class('Router'); $class = $routing->fetch_class(); $method = $routing->fetch_method();
  • 11. if(! empty($doesNotRequireLogin[$class][$method])) { return true; } else { if(! $_SESSION['userType']) { //checking authentication header("location: {$baseURL}common/login"); exit; } else { if(empty($permissions[$_SESSION['userType']][$class][$method]) || $permissions[$_SESSION['userType']][$class][$method]!=true) { header("location: {$baseURL}common/unauthorized"); exit; } else { return true; } } } header("location: {$baseURL}common/unauthorized");
  • 12. <?php $doesNotRequireLogin = array(); $permissions = array(); $doesNotRequireLogin['common']['index'] = true; $doesNotRequireLogin['common']['login'] = true; $doesNotRequireLogin['common']['dologin'] = true; $doesNotRequireLogin['common']['unauthorized'] = true; $doesNotRequireLogin['common']['message'] = true; $doesNotRequireLogin['common']['forgotpassword'] = true;
  • 13. $permissions[„member‟][„blog'][„post‟] = true; $permissions[„member‟][„blog'][„view‟] = true; $permissions[„member‟][„blog'][„save‟] = true; $permissions[„member‟][„blog'][„rating‟] = true; $permissions[„guest‟][„blog'][„view‟] = true;
  • 14. We have eliminated the process of writing the authorization code on each controller functions  We have a better authorized application  We have a central access point with permissions and check.  We have used Array for better performance (you can use XML though)  This solution is better suited for role based access as well as dynamic role option.
  • 15. ACL as a Library ◦ There are few libraries available from CodeIgniter wiki page and other sources which can be used for ACL purpose.
  • 16. M. MIZANUR RAHMAN Founder & C.T.O Informatix Technologies [mizan@informatixbd.com]