如何 对权限缓存

如何 对权限缓存

BaseControlelr.php


function filters()

    {

        return array(

           // 'accessControl',

        );

    }

    

    public function accessRules()

    {

    	/*

    	*: 任何用户,包括匿名和验证通过的用户。

		?: 匿名用户。

		@: 验证通过的用户。

    	*/

        return array( 

        	array('allow', 

        		'controllers'=>array('site'),

            	'actions'=>array('login'),

                'users'=>array('?'),

            ),

        	//全局设定,哪些角色可以访问

        	array('allow', 

            	'actions'=>array(),

                'users'=>array('@'),

            ),

           //其他拒绝

            array('deny', 

                'users'=>array('?'),

            ),

            	

        );

    }

这是对用户 角色的控制

对操作的控制 在每个控制器里 如下


public function loadUser($id=null)

	{

		if(!access('User load')){throw new CHttpException(403);exit(); }

		if($this->_model===null)

问题:

每次执行 if(!access(‘User load’)){throw new CHttpException(403);exit(); }

是否会带来大量开销?

如果是,请问怎么解决?

能否把 每个action里面的 f(!access(‘User load’)){throw new CHttpException(403);exit(); }

放到BaseControlelr.php

能否举个小例子,好看懂?

期待解决。。。 :unsure:

权限默认有缓存

使用什么缓存,周期多少。。。

这个,你自己看代码吧 我不记得了

checkAccess()可以在任何地方调用。所谓的缓存是指在同一个请求里多次检查同一个权限只有第一次会有开销。如果是不同的请求,那么每次都有开销的。

是的。checkAccess()是只能做到action这一级吗?

看到这个是写在action里面的,当然可以在basecontroller里做全局的 checkAccess,

能进一步细化吗?

如文章 类型不是每个人 都可以发表几种类型的,

类型表一张 文章表一张

发表的时候 ,如给A用户 一种类型,那么他只有发表这种类型的文章

就是问下,到目前只知道 可以到action这级

YII的缓存 很强。。

呵呵

谢谢回复。。

权限检查可以控制比action粒度更小的operation(在添加权限时,不是有个商业逻辑在吗,你可以根据他的Bool值来决定是否进一步授权)。在我看来貌似rbac能够做到任意的精度,因为你在checkaccess时的权限可以是你完全自定义的逻辑。