- 浏览: 3315720 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (567)
- Web前端-html/表单 (19)
- Web前端-CSS (24)
- Web前端-CSS框架 (4)
- Web前端-JS语言核心 (50)
- Web前端-JS客户端 (26)
- nodejs生态+grunt (10)
- seajs和requirejs (9)
- backbone等框架 (7)
- 模板基础 (7)
- Web前端-deps(不改动) (6)
- Web前端-component (10)
- Web前端-jquery-plugin (13)
- 浏览器兼容性 (6)
- Web前端-使用jQuery (25)
- Web前端-使用jqueryui (6)
- Web前端-性能优化 (3)
- Web协议-HTTP (6)
- ExtJS (13)
- PHP (22)
- PHP面向对象 (4)
- PHP扩展-SOAP (6)
- PHP扩展-curl (4)
- PHP与HTML(导出) (5)
- PHP扩展-综合 (7)
- mysql基础应用 (18)
- 技术心情 (18)
- 算法和面试题 (17)
- 工具(开发)使用 (36)
- memcached原理 (2)
- session和cookie (4)
- UML (2)
- Web前端_FusionCharts (5)
- Web前端_Flex (4)
- Web前端_JSP (3)
- JavaSE (10)
- JavaEE (4)
- tomcat (2)
- Servlet开发 (3)
- Spring开发 (1)
- REST相关 (2)
- 大访问量、高并发 (2)
- 网络编程 (1)
- YII (21)
- linux命令和内核 (12)
- yii与数据库 (10)
- yii与表单 (12)
- yii view层 (1)
- perl (7)
- yii扩展 (7)
- shell (4)
- photoshop (7)
- 视觉设计 (2)
- 我关注的名人在路上 (4)
- 1-自学能力 (1)
- 2-人际沟通能力 (3)
- 3-职业规划能力 (7)
- 4-项目管理能力 (2)
- python (3)
- django (4)
- Mysql高级应用 (6)
- prototype.js (4)
- Web系统安全 (1)
- Web前端-mobile (2)
- egret (6)
- jQuery源码分析 (5)
- fis (4)
最新评论
-
yzq21056563:
感谢作者分享~请教下,http://www.lisa33xia ...
CSS基础:text-overflow:ellipsis溢出文本 -
u012206458:
$.ajax的error,complete,success方法 -
DEMONU:
谢谢,虽然不能给你赞助,但是要给你顶
mysql中key 、primary key 、unique key 与index区别 -
njupt_tolmes:
阿凡达阿凡达阿凡达阿凡达阿凡达阿凡达阿凡达阿凡达阿凡达阿滕庆亚 ...
CSS基础:text-overflow:ellipsis溢出文本 -
zenmshuo:
用过SpreadJS,也包含数据可视化的图表
推荐几个web中常用js图表插件
Yii使用filter进行访问控制
作者:zccst
在Controller.php
注:filters是yii的CController.php中定义的方法,而Controller.php是继承CController.php的。此处,相当于覆盖父类中的filters方法。而所有的XXController.php又继承自Controller.php,显然都可以定义authlessActions()方法覆盖父类中相应方法。
批注1:yii中使用filter规则。
For method-based filters, a method named 'filterXYZ($filterChain)' in the controller class will be executed, where 'XYZ' stands for the filter name as specified in filters(). Note, inside the filter method, you must call $filterChain->run() if the action should be executed. Otherwise, the filtering process would stop at this filter.
批注2:另一种用法(隐式用法)
在1.1.7中,public function filters() {
return array(
'accessControl',
);
}
也即accessControl对应下面这个方法
public void filterAccessControl(CFilterChain $filterChain)
The filter method for 'accessControl' filter. The filter method for 'accessControl' filter. This filter is a wrapper of CAccessControlFilter. To use this filter, you must override accessRules method.
所以不难看出filter至少有两种类型,一种是accessAuth,另一种是accessControl。
批注3:当用户访问index.php?r=site/login
首先,映射到SiteController.php中
而在SiteController.php中,覆盖了Controller.php的public function authlessActions()方法,不再是空数组,
而是return array('login', 'logout', 'error', 'page', 'bashJs');
批注4:在actionLogin方法里
根据最前面的方法in_array($this->getAction()->getId(), $this->authlessActions())可以判断该action是否在不用授权数组中。
注:查看当前controller和action的ID,是Yii::app()->controller->id;和$this->getAction()->getId();
其中,$this->getAction()是一个很大的对象,$this->getAction()->getId()是login。
批注5:关于未登录前,应该走下面这个逻辑
根据yii框架实现机制,发现Yii::app()->user->loginRequired()封装了Yii::app()->user->loginUrl。
即注释掉改行后,project/不会自动跳转到project/index.php?r=site/login页面。
最后,如果用户登陆成功后,用户跳转到site/index,而其定义为outsource/index,当OutsourceController.php执行时,又一次执行Controller.php,此时的authlessActions数组为空,则in_array()为false,取反为true。执行检查上次修改密码超过30天和是否已添加Hi。
如果您觉得本文的内容对您的学习有所帮助,您可以微信:
作者:zccst
在Controller.php
注:filters是yii的CController.php中定义的方法,而Controller.php是继承CController.php的。此处,相当于覆盖父类中的filters方法。而所有的XXController.php又继承自Controller.php,显然都可以定义authlessActions()方法覆盖父类中相应方法。
public function filterAccessAuth($filterChain) { if(Yii::app()->user->getIsGuest() && !in_array($this->getAction()->getId(), $this->authlessActions())) { Yii::app()->user->setFlash("info", "请先登录"); Yii::app()->user->loginRequired(); //封装了Yii::app()->user->loginUrl } elseif(!in_array($this->getAction()->getId(), $this->authlessActions()) && $this->current_user && $this->current_user->isPasswordExpired()) { $this->user->setFlash('error', "你的密码已经过期,超过: " . Yii::app()->params['user_pwd_max_expire_day'] . "天没有修改,请修改密码"); $this->redirect($this->createUrl("/account/profile")); } if(!in_array($this->getAction()->getId(), $this->authlessActions()) && $this->current_user && $this->current_user->hi_id == NULL) { $target_url = $this->createUrl('account/profile'); $this->user->setFlash('info', "你还没有设置Hi,请尽快到" . "<a href=\"$target_url\"> 账号设置 </a>" . "添加!"); } $filterChain->run(); } public function filters() { return array( 'accessAuth', ); } public function authlessActions() { return array(); }
批注1:yii中使用filter规则。
For method-based filters, a method named 'filterXYZ($filterChain)' in the controller class will be executed, where 'XYZ' stands for the filter name as specified in filters(). Note, inside the filter method, you must call $filterChain->run() if the action should be executed. Otherwise, the filtering process would stop at this filter.
批注2:另一种用法(隐式用法)
在1.1.7中,public function filters() {
return array(
'accessControl',
);
}
也即accessControl对应下面这个方法
public void filterAccessControl(CFilterChain $filterChain)
The filter method for 'accessControl' filter. The filter method for 'accessControl' filter. This filter is a wrapper of CAccessControlFilter. To use this filter, you must override accessRules method.
class PostController extends CController { ...... public function accessRules() { return array( rray('deny', 'actions'=>array('create', 'edit'), 'users'=>array('?'), ), array('allow', 'actions'=>array('delete'), 'roles'=>array('admin'), ), array('deny', 'actions'=>array('delete'), 'users'=>array('*'), ), ); } }
所以不难看出filter至少有两种类型,一种是accessAuth,另一种是accessControl。
批注3:当用户访问index.php?r=site/login
首先,映射到SiteController.php中
而在SiteController.php中,覆盖了Controller.php的public function authlessActions()方法,不再是空数组,
而是return array('login', 'logout', 'error', 'page', 'bashJs');
批注4:在actionLogin方法里
if(isset($_POST['LoginForm'])) { $model->attributes=$_POST['LoginForm']; // validate user input and redirect to the previous page if valid if($model->validate() && $model->login()) { //初始化前,先初始化父类Controller.php的成员变量和成员函数。 $this->init(); // 检查上次密码修改时间 if($this->current_user->isPasswordExpired()) { $this->user->setFlash('error', "密码已经" . Yii::app()->params['user_pwd_max_expire_day'] . "天没有修改过了,请修改密码"); $this->redirect($this->createUrl("/account/profile")); } // 检查有没有设置Hi if($this->current_user->hi_id == NULL) { $target_url = $this->createUrl('account/profile'); $this->user->setFlash('info', "你还没有设置Hi,请尽快到"."<a href=\"$target_url\"> 账号设置 </a>"."添加!"); } $this->redirect(Yii::app()->user->returnUrl); } }
根据最前面的方法in_array($this->getAction()->getId(), $this->authlessActions())可以判断该action是否在不用授权数组中。
注:查看当前controller和action的ID,是Yii::app()->controller->id;和$this->getAction()->getId();
其中,$this->getAction()是一个很大的对象,$this->getAction()->getId()是login。
批注5:关于未登录前,应该走下面这个逻辑
if(Yii::app()->user->getIsGuest() && !in_array($this->getAction()->getId(), $this->authlessActions())) { Yii::app()->user->setFlash("info", "请先登录"); Yii::app()->user->loginRequired(); //封装了Yii::app()->user->loginUrl }
根据yii框架实现机制,发现Yii::app()->user->loginRequired()封装了Yii::app()->user->loginUrl。
即注释掉改行后,project/不会自动跳转到project/index.php?r=site/login页面。
最后,如果用户登陆成功后,用户跳转到site/index,而其定义为outsource/index,当OutsourceController.php执行时,又一次执行Controller.php,此时的authlessActions数组为空,则in_array()为false,取反为true。执行检查上次修改密码超过30天和是否已添加Hi。
如果您觉得本文的内容对您的学习有所帮助,您可以微信:
发表评论
-
Yii隐藏index.php文件的步骤
2014-06-14 14:03 12033作者:zccst 1.修改Apache的配置httpd.co ... -
YII异常处理actionError
2014-06-14 08:47 1975zccst转 错误处理目录 1,引发异常 2,显示错误 3, ... -
YII之 redirect 与contoller之间的方法调用
2014-05-31 18:44 11280作者:zccst 一个contoller里怎么调用另一个co ... -
yii中设置默认时区和语言
2013-04-24 16:28 3520作者:zccst 把php从5.2升级到5.4后,发现5. ... -
Yii异常解决办法
2013-04-23 17:15 1181作者:zccst 在Yii的项目中有一个../protect ... -
Yii之HttpRequest相关
2012-08-16 18:35 5114作者:zccst yii中的HttpRequest很像Jav ... -
yii之Log(日志)使用
2012-06-07 19:17 24937作者:zccst Yii 提供了 ... -
Yii之urlManager相关
2012-03-31 13:04 7107作者:zccst 首先urlManager是CUrlMan ... -
yii框架的执行过程
2012-03-11 14:09 3767作者:zccst 二、controllers里的$this ... -
Yii中引入module
2012-03-11 14:06 4968作者:zccst 一、controller与layout/ ... -
Yii->user(当前用户)相关
2012-03-02 17:50 21705作者:zccst 常用的用法是 class Contro ... -
如何在纯js文件中设置yii方式的url地址
2012-02-20 20:56 3329作者:zccst 1,在siteController.ph ... -
Yii控制层处理结果返回前端的三种方式(render)
2012-01-12 16:28 31302Yii控制层处理结果返回前端的三种方式 作者:zccst ... -
Yii之widget专题
2012-01-12 16:14 11548作者:zccst 关于widgets ... -
Yii中使用session防止重复提交
2012-01-09 12:13 3207表单提交时,由于网速等原因,会出现重复提交的现象。 一、从前 ... -
yii中引入js和css文件
2011-12-29 20:10 35666作者:zccst 四、在视图层(../views/..)添加 ... -
Yii设置分页
2011-12-11 16:41 46181,在../models/NewDemand.php中定义pa ... -
在yii中使用session和cookie
2011-12-08 09:41 17317作者:zccst 2014-6-10 yii 操作sess ... -
Yii中引入php文件及插件
2011-11-03 14:32 24574作者:zccst 一、设置环境变量(在PHP) echo g ... -
YII初步
2011-06-03 22:19 2402安装过程,文档里有。 一、搭建Yii环境可能遇到的问题 1, ...
相关推荐
YII框架中的filter过滤器是该框架提供的一个强大功能,它允许开发者在控制器动作执行之前或之后执行一段自定义的代码,用以完成如访问控制、性能监控、数据验证等任务。过滤器的实现方式可以是通过控制器类中的特定...
- **可扩展性**:支持自定义规则,可以根据业务需求添加复杂的访问控制逻辑。 - **版本更新**:`1.3beta` 表示这是该插件的一个测试版本,可能包含一些新功能和改进,同时也可能存在一些已知问题。 4. **安装与...
它还支持用户认证和授权机制,如访问控制过滤器(Access Control Filter)。 7. 表单和验证:Yii 提供了方便的表单处理和数据验证工具,可以快速创建和验证用户输入,减少错误和安全风险。 8. 视图助手:Yii 视图...
例如,本文中的"filters"方法定义了三个过滤规则:"accessControl"用于执行CRUD操作的访问控制,"postOnly+delete"表示只允许通过POST请求进行删除操作,"projectContext+createindexadmin"表示在创建、列表、管理...
- 通过URL访问模块中的控制器和动作。 **9. 路径别名** - **定义**: 用于简化文件路径的引用方式。 - **用途**: 方便维护文件路径,避免硬编码路径带来的问题。 **10. 开发规范** - **URL**: 设计友好的URL。 -...
3. 修改accessRules()方法,将之前硬编码分配用户权限的方式改为根据数据库中用户的角色信息来进行访问控制。比如,修改原有的'users'参数为一个数组,使用用户角色字段来匹配具体的访问权限。 文章中的这部分说明...
开发者可以在这些方法中加入自己的逻辑处理代码,比如记录日志、进行访问控制检查等。 过滤器也可以阻止动作和后续其他过滤器的执行。如果在preFilter方法中返回false,则动作不会执行,且postFilter方法不会被调用...
- **使用事务**: 使用`beginTransaction()`和`commit()`或`rollBack()`进行事务处理。 - **绑定参数**: 通过`bindValue()`方法绑定参数到SQL语句。 - **使用表前缀**: 在数据库连接配置中设置表前缀。 **2. ...
- 授权可通过访问控制过滤器(Access Control Filter, ACF)或角色基础访问控制(Role-Based Access Control, RBAC)进行。 8. **错误处理和日志记录**: - 错误和异常处理机制,便于调试和生产环境的错误报告。 ...
- 授权则可以通过访问控制过滤器(Access Control Filter, ACF)和角色基础访问控制(Role-Based Access Control, RBAC)来实现。 7. **缓存管理**: - Yii 2.0 支持多种缓存策略,如文件、数据库、APC等,可以...
在Yii框架中,创建应用实例并运行它时,可以使用Yii::app()方法访问应用实例。这通常在应用的任何位置进行,比如在控制器、视图或其他地方。 总体来说,Yii框架设计上遵循了MVC(Model-View-Controller)模式,这有...
对于投票,可能需要限制每个用户只能投一票,这可以通过访问控制过滤器(Access Control Filter, ACF)实现。 9. **表单处理** 使用Yii的CForm或ActiveForm类创建投票表单,处理用户的提交。在控制器中验证输入,...
- Yii 的访问控制过滤器(Access Control Filter, ACF)可以帮助设置角色和权限,实现基于角色的访问控制(RBAC)。 - 输入验证:Yii 提供了丰富的表单验证规则,确保用户输入的安全性。 8. **部署与扩展**: - ...
在Yii中,这可以通过访问控制过滤器(Access Control Filter, ACF)实现。 例如,下面是一个简单的带有访问控制的Controller: ```php class AdminDefaultController extends CController { public function ...
- Yii DAO(数据访问对象)接口允许直接执行 SQL 查询和操作。 - 建立数据库连接,如使用 `CDbConnection` 作为应用组件。 - 执行 SQL 语句,获取查询结果,使用事务处理,绑定参数和列,设置表前缀,使用查询...