`
wbj0110
  • 浏览: 1604089 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Yii框架权限控制

阅读更多

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

 

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

 

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

 

[php] view plaincopy
 
  1. /** 
  2.  * Controller is the customized base controller class. 
  3.  * All controller classes for this application should extend from this base class. 
  4.  */  
  5. class JController extends CController  
  6. {  
  7.     /** 
  8.      * @var string the default layout for the controller view. Defaults to '//layouts/column1', 
  9.      * meaning using a single column layout. See 'protected/views/layouts/column1.php'. 
  10.      */  
  11.     public $layout='//layouts/column1';  
  12.     /** 
  13.      * @var 菜单 {@link CMenu::items}. 
  14.      */  
  15.     public $menu=array();  
  16.     /** 
  17.      * @var 路径设置 
  18.      * be assigned to {@link CBreadcrumbs::links}. Please refer to {@link CBreadcrumbs::links} 
  19.      * for more details on how to specify this property. 
  20.      */  
  21.     public $breadcrumbs = array();  
  22.     //视图数据  
  23.     public $view        = array();  
  24.     //是否自动输出  
  25.     public $autoView    = false;  
  26.     //输出页面  
  27.     public $renderPage  = '';  
  28.     //页面提示文字  
  29.     public $notice  = '';  
  30.     //搜索标签  
  31.     public $searchTag   = array();  
  32.     //其他代码  
  33.     public $otherHtml   = '';  
  34.     //按钮标签  
  35.     public $buttonTag   = array();  
  36.     //单位标签  
  37.     public $unitTag     = '';  
  38.     //输出信息  
  39.     public $alertText   = '';  
  40.     //是否显示外框  
  41.     public $haveBorder   = true;  
  42.       
  43.     public function init()  
  44.     {  
  45.         $cookie = Yii::app()->request->getCookies();  
  46.         Yii::app()->user->id  = $cookie->itemAt('SSD_user_id')->value;  
  47.         Yii::app()->user->name    = $cookie->itemAt('SSD_user_nick')->value;  
  48.     }  
  49.   
  50.     /** 
  51.      * 判断是否有指定操作的权限 
  52.      *  
  53.      * @param string $action 
  54.      */  
  55.     public function checkPower($action)  
  56.     {  
  57.         return "purviewPcc::model()->checkPower('{$this->getModule()->getId()}', '{$this->getId()}', '{$action}')";   
  58.     }  
  59.       
  60.     /** 
  61.      * 检查权限扩展 
  62.      *  
  63.      * @param string $action 
  64.      * @param string $contrl 
  65.      * @param string $module 
  66.      */  
  67.     public function checkPowerEx($action$contrl=null, $module=null)  
  68.     {  
  69.         if ($contrl === null)  
  70.         {  
  71.             $contrl = $this->getId();  
  72.         }  
  73.           
  74.         if ($module === null)  
  75.         {  
  76.             $module = $this->getModule()->getId();  
  77.         }  
  78.           
  79.         return purviewPcc::model()->checkPower($module$contrl$action);  
  80.     }  
  81.       
  82.     /** 
  83.      * 权限判断 
  84.      * 
  85.      */  
  86.      public function purview($module$control$action)  
  87.      {  
  88.         if (!purviewPcc::model()->checkPurview($module,$control,$action))  
  89.         {  
  90.             echo '没有访问权限!';  
  91.             Yii::app()->end();  
  92.         }  
  93.      }  
  94.   
  95.     /** 
  96.      * Action操作前动作 
  97.      * 
  98.      * @param unknown_type $action 
  99.      * @return unknown 
  100.      */   
  101.     public function beforeAction($action)  
  102.     {  
  103.         if($action && $this->getModule())  
  104.             $this->purview($this->getModule()->getId(), $this->getId(), $action->getId());  
  105.         return true;  
  106.     }  
  107.       
  108.       
  109.     /** 
  110.      * Action操作后动作 
  111.      * 
  112.      * @param string $action 
  113.      */  
  114.     public function afterAction($action)  
  115.     {  
  116.         /** 是否自动输出 */  
  117.         if ($this->autoView)  
  118.         {  
  119.             //默认输入页面  
  120.             if (empty($this->renderPage))  
  121.                 $this->renderPage    = $action->getId();            
  122.             $this->render($this->renderPage, $this->view);  
  123.         }  
  124.     }  
  125.       
  126.     /** 
  127.      * 页面提示窗口 
  128.      *  
  129.      * @param string $view 
  130.      * @param array $data 
  131.      * @param bool $exit 
  132.      */  
  133.     public function alert($msg$href = 'javascript:history.go(-1);'$time = 0, $exit = true, $view = '//system/alert'$data = array())  
  134.     {  
  135.         $this->autoView  = false;  
  136.         $data['msg']    = $msg;  
  137.         $data['href']   = $href;  
  138.         $data['time']   = $time;  
  139.         $this->render($view$data);  
  140.         if ($exit)  
  141.         {  
  142.             Yii::app()->end();  
  143.         }  
  144.     }  
  145. }  

 

 

使用方法:

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

步骤:

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

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

 

[php] view plaincopy
 
  1. return array(  
  2.     'default'=>array(  
  3.         'site'=>array(  
  4.             'index'=>110101,  
  5.             'delete'=>11010101,  
  6.             'create'=>11010102,  
  7.             'update'=>11010103  
  8.         )  
  9.     )  
  10. );  


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

 

 

[php] view plaincopy
 
  1. //表格内容  
  2. $this->widget('zii.widgets.grid.CGridView'array(  
  3.     'dataProvider'=>$model->search(),  
  4.     'columns'=>array(  
  5.         'id',  
  6.         'start_dt',  
  7.         'end_dt',  
  8.         array(  
  9.             'class'=>'CButtonColumn',  
  10.             'template'=>'{update} {delete}',  
  11.             'updateButtonOptions'=>array(  
  12.                 'onclick'=>'$.fn.sinaShow.openWindow("节目修改", this.href); return false;',  
  13.             ),  
  14.             'buttons'=>array(  
  15.                 'update'=>array(  
  16.                     'visible'=>$this->checkPower('update')  
  17.                 ),  
  18.                 'delete'=>array(  
  19.                     'visible'=>$this->checkPower('delete')  
  20.                 ),  
  21.             )  
  22.         ),  
  23.     )  
  24. ));  



 

 

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

分享到:
评论

相关推荐

    Yii框架快速入门

    Yii框架遵循MVC(Model-View-Controller)架构模式,提供了丰富的特性,如缓存管理、安全控制、数据库访问、表单验证等。它还支持AJAX,能够轻松创建动态Web应用。Yii的性能优秀,因为其代码经过了精心优化,且内建...

    Yii框架学习笔记

    5. **安全组件**:提供登录验证、权限控制等组件,确保应用的安全性。 6. **助手函数**:丰富的助手函数库,简化HTML代码生成和其他常见任务。 7. **路由**:通过路由系统,可以灵活地映射URL到控制器和方法,实现...

    Yii框架PDF中文文档

    ### Yii框架知识点总结 #### 一、概述与新特性 **Yii** 是一款高性能的PHP Web应用程序开发框架,以其简洁高效著称。该框架旨在帮助开发者快速构建安全且高效的Web应用。本文档根据官方中文文档及《Yii权威指南》...

    yii框架商城

    总的来说,“yii框架商城”是一个综合展示了Yii框架特性和功能的项目,涵盖了Web开发的多个关键领域,包括数据库操作、用户认证、权限控制、MVC架构、代码生成、购物车管理、订单处理和前端交互等。通过学习和实践这...

    yii框架下的yii_blog 博客系统

    首先,Yii框架的核心特性包括MVC(Model-View-Controller)设计模式、主动记录(ActiveRecord)模式、缓存管理、身份验证和访问控制、URL管理等。这些特性使得开发过程结构清晰,易于维护。 1. **MVC模式**:Yii的...

    Yii框架详解

    Yii框架提供了一系列预构建的组件,如数据库访问对象(DAO)、ActiveRecord、MVC(模型-视图-控制器)架构等,使得开发者能够快速地搭建和开发Web应用。其内置的代码生成工具Gii可以帮助自动生成常见的CRUD操作和...

    yii框架中文手册教程和YII模板

    首先,Yii框架的核心特性包括MVC(模型-视图-控制器)设计模式、Active Record ORM(对象关系映射)、I18N和L10N(国际化和本地化)支持、缓存策略、安全性和权限管理等。MVC模式使得代码结构清晰,易于维护。Active...

    YII框架翻译整理最终稿 -

    3. **MVC架构**:像许多其他 PHP 框架一样,Yii 遵循模型-视图-控制器(MVC)设计模式,有利于分离业务逻辑和表现层。 4. **丰富的功能**:Yii 内置了多种实用功能,包括缓存机制、安全防护、数据库访问对象(DAO)...

    YII框架入门视频教程

    【Yii框架入门视频教程】是一套专为初学者设计的教育资源,旨在引导学习者进入Yii框架的世界。Yii,一个高性能的PHP框架,被广泛用于开发Web 2.0应用程序。本教程通过一系列视频,逐步讲解了框架的基本概念、数据库...

    YII框架开源项目

    5. **权限控制**:通过角色权限管理,控制不同用户组对论坛资源的访问权限。 6. **插件与主题**:iiSNS允许安装和自定义插件,以扩展功能;同时支持更换主题,满足个性化需求。 7. **搜索引擎优化**:iiSNS内置SEO...

    yii 2.0 框架安装包

    - **安全功能**:内置了用户认证、权限控制、CSRF防护等安全特性,有助于保护应用免受攻击。 - **模板引擎**:使用Twig或Smarty等第三方模板引擎也是可能的,不过默认的是基于PHP的视图渲染。 - **单元测试**:Yii ...

    PHP分享一个功能强大的yii框架的分类树扩展

    7. **权限控制**:如果应用有角色和权限管理,扩展可能集成这一特性,确保只有特定用户能修改分类树。 8. **缓存优化**:为了提高性能,扩展可能利用Yii的缓存机制,缓存已构建的分类树,减少数据库查询。 9. **...

    yii框架中文手册教程

    ### Yii框架中文手册教程知识点概览 #### 一、Yii框架简介 - **定义与特点**:Yii是一个基于组件的高性能PHP框架,专为大型Web应用程序的开发而设计。其名称“Yii”代表着简单(Easy)、高效(Efficient)及可扩展...

    uniapp源码外卖联盟小程序-后台PHP源码Yii框架开发的DuAdmin后台源码-.zip

    DuAdmin则是基于Yii2开发的一套后台管理系统模板,它提供了丰富的后台组件和预设的管理页面,如用户管理、权限控制、数据统计等。这使得开发者能够快速搭建起一个功能齐全的后台管理界面,而无需从零开始设计和编写...

    YII框架中文手册教程

    ### YII框架中文手册教程知识点概述 #### 一、Yii框架简介 - **定义与特点**:Yii是一个基于组件的高性能PHP框架,专为开发大型Web应用而设计。它的核心特性在于简单(easy)、高效(efficient)、可扩展(extensible),...

    yii权限管理总结、和分析

    ### yii权限管理总结与分析 ...此外,Yii还提供了一系列便捷的方法来管理和验证权限,大大简化了权限控制的工作量。对于那些需要高级权限管理的应用程序来说,Yii的权限管理系统无疑是一个非常有用的工具。

    PHP Yii框架开发实例

    ### PHP Yii框架开发实例知识点详解 #### 一、部署Yii环境 **1.1 配置基础环境** ...此外,我们还了解了Yii框架的一些基本概念,如控制器、视图等。这些基础知识对于进一步学习和掌握Yii框架至关重要。

    Yii框架ACF(accessController)简单权限控制操作示例

    Yii框架中的ACF(accessController)是一个用于权限控制的组件,可以通过设置访问规则来控制用户对特定动作的访问权限。 在Yii框架中,ACF主要通过behaviors()方法来实现权限控制。在behaviors()方法中,返回一个...

    yii框架 rbac扩展

    在Yii框架1.1版本中,RBAC扩展提供了一套完善的机制,允许开发者轻松管理用户的权限,确保系统的安全性。 RBAC的核心概念包括:角色(Role)、任务(Task)、操作(Operation)以及规则(Rule)。在Yii的RBAC系统中...

Global site tag (gtag.js) - Google Analytics