phalcon: acl权限控制

目录控制:

 

public/index.php:

$di['aclResource']=function(){
        return include_once '../app/config/frontbackAcl.php';
    };
    $di['dispatcher'] = function(){
        $eventManager = new \Phalcon\Events\Manager();
        $securyDeep = new SecurityDeep();
        $eventManager->attach("dispatch", $securyDeep);
        $dispatch = new \Phalcon\Mvc\Dispatcher();
        $dispatch->setEventsManager($eventManager);
        return $dispatch;
    };

  

app/config/frontbackAcl.php:

return new \Phalcon\Config(array(

        'Manager'=> array(
            'rote'=>new \Phalcon\Acl\Role("Manager"),
            'resource'=>array(
                'Index'=> array("index", 'last', 'login', 'signup'),
                'Register'=> array('index', 'doing'),
                'Delete'=>array('index', 'delete')
            )
        ),
        'Operator'=>array(
            'rote'=>new \Phalcon\Acl\Role("Operator"),
            'resource'=>array(
                'Index'=> array("index", 'last', 'login','signup'),
                'Register'=> array('index', 'doing'),
            )
        )

));

  

securityDeep.php:

use \Phalcon\Mvc\User\Plugin,
    \Phalcon\Events\Event,
    \Phalcon\Mvc\Dispatcher;
class SecurityDeep extends Plugin {

    public function __construct() { }

    public function _getAcl()
    {
        $acl = new \Phalcon\Acl\Adapter\Memory();
        //默认权限
        $acl->setDefaultAction(\Phalcon\Acl::DENY);
        //创建
        $allResource = $this->_callAcl();
        foreach($allResource as $key=>$value)
        {
            //创建角色,并将角色添加到acl
            $acl->addRole($value['rote']);
            //var_dump($value['rote']);
            foreach($value['resource'] as $k=>$v)
            {
                //echo $k.'<br>';
                foreach($v as $ky=>$vy)
                {
                    //添加资源
                    $acl->addResource(new \Phalcon\Acl\Resource(strtolower($k)), $vy);
                    //添加访问权限
                    $acl->allow($key, strtolower($k), $vy);
                   // echo '|--'.$k.':'.$vy.'<br>';
                }
            }
        }
        return $acl;
    }
    public function _callAcl()
    {
        if($this->persistent->acl == null) {
            $this->persistent->acl =  $this->aclResource;
        }
        return $this->persistent->acl;
    }

    public function beforeExecuteRoute(Event $event, Dispatcher $dispatcher)
    {
        $controller = $dispatcher->getControllerName();
        $action = $dispatcher->getActionName();
        $role = '';
        if( $this->session->has('userInfo'))
        {
            $managerInfo = $this->session->get('userInfo');
            $role = $managerInfo['role'];
        }
        if(empty($role)) $role = 'Operator';
        $acl = $this->_getAcl();
        $isAllowed = $acl->isAllowed($role, strtolower($controller), strtolower($action));
        if(!$isAllowed)
        {
            //echo "no access";exit;
        
$dispatcher->forward(array(
'controller'=>'index',
'action'=>'error',
'params'=>array('msg'=>'no access')
));

} } }

  

 

那么,在indexController.php页面中,可以通过如下方法,获取params传过来的值:

public function errorAction()
    {
        //获取传过来的参数
        $param = $this->dispatcher->getParams();
        $msg = isset($param['msg'])? $param['msg'] : '' ;
        
        
        $this->view->web_title = '错误';
        $this->view->pick('index/error');
    }

  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值