Yii框架权限控制

需求:公司拥有一套用户权限系统。我们在新版框架中,我们需要兼容这套用户权限系统。

 

问题:YII单表方式已经满足不了我们的需求,急切需要对YII进行扩展设计,支持数据库分表设计

 

解决方法:1、新建protected/sinashowExt/JController.php文件

/**
 * Controller is the customized base controller class.
 * All controller classes for this application should extend from this base class.
 */
class JController extends CController
{
	/**
	 * @var string the default layout for the controller view. Defaults to '//layouts/column1',
	 * meaning using a single column layout. See 'protected/views/layouts/column1.php'.
	 */
	public $layout='//layouts/column1';
	/**
	 * @var 菜单 {@link CMenu::items}.
	 */
	public $menu=array();
	/**
	 * @var 路径设置
	 * be assigned to {@link CBreadcrumbs::links}. Please refer to {@link CBreadcrumbs::links}
	 * for more details on how to specify this property.
	 */
	public $breadcrumbs	= array();
	//视图数据
	public $view		= array();
	//是否自动输出
	public $autoView	= false;
	//输出页面
	public $renderPage	= '';
	//页面提示文字
	public $notice	= '';
	//搜索标签
	public $searchTag	= array();
	//其他代码
	public $otherHtml	= '';
	//按钮标签
	public $buttonTag	= array();
	//单位标签
	public $unitTag		= '';
	//输出信息
	public $alertText	= '';
    //是否显示外框
    public $haveBorder   = true;
    
	public function init()
	{
		$cookie	= Yii::app()->request->getCookies();
		Yii::app()->user->id	= $cookie->itemAt('SSD_user_id')->value;
		Yii::app()->user->name	= $cookie->itemAt('SSD_user_nick')->value;
	}

	/**
	 * 判断是否有指定操作的权限
	 * 
	 * @param string $action
	 */
	public function checkPower($action)
	{
		return "purviewPcc::model()->checkPower('{$this->getModule()->getId()}', '{$this->getId()}', '{$action}')";	
	}
	
	/**
	 * 检查权限扩展
	 * 
	 * @param string $action
	 * @param string $contrl
	 * @param string $module
	 */
	public function checkPowerEx($action, $contrl=null, $module=null)
	{
		if ($contrl === null)
		{
			$contrl	= $this->getId();
		}
		
		if ($module === null)
		{
			$module	= $this->getModule()->getId();
		}
		
		return purviewPcc::model()->checkPower($module, $contrl, $action);
	}
	
	/**
	 * 权限判断
	 *
	 */
	 public function purview($module, $control, $action)
	 {
	 	if (!purviewPcc::model()->checkPurview($module,$control,$action))
	 	{
	 		echo '没有访问权限!';
	 		Yii::app()->end();
	 	}
	 }

	/**
	 * Action操作前动作
	 *
	 * @param unknown_type $action
	 * @return unknown
	 */	
	public function beforeAction($action)
	{
		if($action && $this->getModule())
			$this->purview($this->getModule()->getId(), $this->getId(), $action->getId());
		return true;
	}
	
	
	/**
	 * Action操作后动作
	 *
	 * @param string $action
	 */
	public function afterAction($action)
	{
		/** 是否自动输出 */
		if ($this->autoView)
		{
			//默认输入页面
			if (empty($this->renderPage))
				$this->renderPage	= $action->getId();			
			$this->render($this->renderPage, $this->view);
		}
	}
	
	/**
	 * 页面提示窗口
	 * 
	 * @param string $view
	 * @param array $data
	 * @param bool $exit
	 */
	public function alert($msg, $href = 'javascript:history.go(-1);', $time = 0, $exit = true, $view = '//system/alert', $data = array())
	{
		$this->autoView	= false;
		$data['msg']	= $msg;
		$data['href']	= $href;
		$data['time']	= $time;
		$this->render($view, $data);
		if ($exit)
		{
			Yii::app()->end();
		}
	}
}


使用方法:

例子:新做了菜单http://localhost/index.php?r=default/site/index菜单。操作有delete、create、update

步骤:

1、向综合后台管理员申请菜单权限和菜单操作权限(110101、11010101[删除]、11010102[新建]、11010103[修改])

2、在protected/config/purview.php 文件中为对应的action配置权限ID

return array(
	'default'=>array(
		'site'=>array(
			'index'=>110101,
			'delete'=>11010101,
			'create'=>11010102,
			'update'=>11010103
		)
	)
);

3、完成以上功能,基本已经完成了权限的配置,但是假如在用户没有某操作权限的时候,需要隐藏操作链接的时候,我们可以做一下操作

//表格内容
$this->widget('zii.widgets.grid.CGridView', array(
	'dataProvider'=>$model->search(),
	'columns'=>array(
        'id',
		'start_dt',
		'end_dt',
        array(
            'class'=>'CButtonColumn',
            'template'=>'{update} {delete}',
        	'updateButtonOptions'=>array(
				'onclick'=>'$.fn.sinaShow.openWindow("节目修改", this.href); return false;',
			),
			'buttons'=>array(
				'update'=>array(
					'visible'=>$this->checkPower('update')
				),
				'delete'=>array(
					'visible'=>$this->checkPower('delete')
				),
			)
        ),
	)
));


在这里的visible表达式中设置调用$this->checkPower('操作名');就可以隐藏没有权限访问的菜单了

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值