在Yii为Model生成的Controller中,有一个accessRules()方法,用来限制谁可以做什么。这是涉及一个web应用的安全性的重要部分。比如有些删除和更新操作只能由管理员来完成,普通用户没有操作的权限等等,这些都需要通过accessRules()来设置。
这是Yii默认生成的代码:
public function accessRules()
{
return array(
array('allow', // allow all users to perform 'list' and 'show' actions
'actions'=>array('list','show'),
'users'=>array('*'),
),
array('allow', // allow authenticated user to perform 'create' and 'update' actions
'actions'=>array('create','update'),
'users'=>array('@'),
),
array('allow', // allow admin user to perform 'admin' and 'delete' actions
'actions'=>array('admin','delete'),
'users'=>array('admin'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
在前三个规则中,其中*表示所有user,@表示已登录的user,admin是管理员的name,如果管理员有多个,你可以简单地将名字硬编码进去,就像:
array('allow', // allow harold and maude user to perform 'admin' and 'delete' actions
'actions'=>array('admin','delete'),
'users'=>array('harold','maude'),
),
但这样就过于static了,一般用户信息肯定都是存在数据库里,所以这里的规则必须得跟数据库挂钩才行,如何实现呢?我们可以在后面加上一句表达式,比如:
array('allow',
'actions'=>array('publish'),
'users'=>array('@'),
'expression'=>'isset($user->role) && ($user->role==="editor")'
),
只有expression里的表达式为true时规则才能通过,于是这条规则的含义就是将“publish”操作的权限限制在已经登录的并且role为editor的用户中。
Note:$user->role的值必须在用户登录的时候就被赋予,这个过程在身份验证时实现。
还有一种情况就是某个用户只能修改或删除自己创建的内容。比如一个用户创建了某个事件,该用户的ID便与这个事件记录相关联,EventController中修改和删除的操作只能在当前登录用户的ID与事件的ownerId相同时才能被执行。因为accessRules()中的规则必须在加载某个特定的Model前就要被判定,而这种情况下必须要通过加载Model并获取Model中的数据来判断,所以此规则不能在accessRules()中设定。下面有个方法能解决这个问题:
public function actionDelete()
{
$event = $this->loadEvents(); // Fetch the specific event Model.
// Can only delete the events they created:
if ($event->ownerId == Yii::app()->user->id) {
$event->delete();
} else {
throw new CHttpException(403,'Invalid request. You are not allowed to delete this event.');
}
}
分享到:
相关推荐
yii2在使用的时候,访问控制器的时候,如果控制器的名称是驼峰命名法,那访问的url中要改成横线的形式。例如: public function actionRoomUpdate() { // } //访问的时候就要www.test.com/room-update这样访问 最近...
5. **身份认证和授权**:Yii 内置了RBAC(角色基础的访问控制)系统,方便开发者管理用户权限,实现灵活的访问控制策略。 6. **I18N(国际化)与L10N(本地化)**:Yii 支持多语言应用,通过翻译资源文件轻松实现...
1. **yiisoft/yii2**: 框架的核心组件,包括MVC(模型-视图-控制器)架构、数据库访问层、缓存机制、身份验证和授权等。 2. **Composer配置文件**:用于管理依赖和自动加载类库。 3. **基础应用模板**:提供一个基本...
RBAC(Role-Based Access Control)是一种常见的访问控制机制,通过角色来管理用户权限,简化了权限分配的复杂性。 在Yii2中,RBAC可以通过yii\rbac组件来实现。这个组件支持创建角色、任务、规则,并将它们关联...
它还支持用户认证和授权机制,如访问控制过滤器(Access Control Filter)。 7. 表单和验证:Yii 提供了方便的表单处理和数据验证工具,可以快速创建和验证用户输入,减少错误和安全风险。 8. 视图助手:Yii 视图...
5. **用户认证与授权**:Yii 内置了用户认证和权限管理,支持基于角色的访问控制(RBAC),方便实现用户权限管理。 6. **易用性**:Yii 提供了丰富的生成工具(Gii),可以自动生成模型、控制器、表单、CRUD(创建...
- **可扩展性**:支持自定义规则,可以根据业务需求添加复杂的访问控制逻辑。 - **版本更新**:`1.3beta` 表示这是该插件的一个测试版本,可能包含一些新功能和改进,同时也可能存在一些已知问题。 4. **安装与...
4. **权限控制**:Yii的RBAC(基于角色的访问控制)系统允许开发者定义角色、任务和规则,为不同用户提供不同的访问权限。 5. **URL管理**:Yii的URL管理器允许开发者自定义URL格式,使URL更易于理解和搜索引擎优化...
4. **数据库访问**:介绍ActiveRecord模式,用于简化数据库操作,以及查询构建器的使用。 5. **URL管理**:如何定制和管理应用程序的URL模式。 6. **视图和布局**:视图的创建,以及如何使用布局来统一页面样式。 7....
Yii框架内置了角色基础访问控制(Role-Based Access Control, RBAC),可以方便地实现用户权限管理,例如管理员可以发布、编辑和删除新闻,而普通用户只能查看。 5. **缓存机制** 对于新闻系统这种数据更新频繁但...
首先,Yii框架的核心特性包括MVC(Model-View-Controller)设计模式、主动记录(ActiveRecord)模式、缓存管理、身份验证和访问控制、URL管理等。这些特性使得开发过程结构清晰,易于维护。 1. **MVC模式**:Yii的...
对于Composer安装,新手需要访问Composer官方网站下载composer.phar文件,并将其放置在合适的目录下(如/usr/bin),然后使用命令行工具进行Yii框架的项目创建。由于Yii2要求最低PHP版本为5.4,因此在安装前需要确保...
它还有用户认证和授权机制,如基于角色的访问控制(RBAC),帮助你实现权限管理。 八、缓存 Yii支持多种缓存策略,包括文件缓存、数据库缓存、APC、Memcached和Redis等。这些缓存机制可以极大地提高应用的响应速度...
2. **Authentication与Authorization**:Yii提供了用户认证和授权机制,包括身份验证、角色基础访问控制(RBAC)等,确保应用的安全性。 3. **Form处理**:Yii提供了表单建模和验证功能,简化了表单数据的接收和...
此外,Yii提供了缓存管理、用户认证和权限控制、表单验证、安全防护等功能,使得开发过程更加安全和高效。 在"Yii视频课程源码+课件"中,你可以找到一个完整的项目实例,这将帮助你从实际操作的角度去学习Yii。源...
1. **用户认证与授权**:Yii2提供了强大的身份验证和权限控制机制,如RBAC(角色基础访问控制)。在医疗系统中,这可以确保不同级别的医生、护士和患者只能访问他们被授权的数据。 2. **数据库操作**:Yii2的Active...
2. 前端控制器Application:在Yii1.1中,前端控制器用于解析用户指令,接收请求,并将其分发给合适的控制器进行处理,作为请求处理流程的环境。 3. 系统基类命名约定:Yii的命名约定中,所有的系统基类都以"C"开头,...
7. **web**:Web应用的入口点,包含`index.php`,它是Web服务器直接访问的文件,用于启动Yii2框架。 Yii2还提供了一些核心特性,例如: - **Gii**: 一个代码生成工具,可以帮助快速生成模型、控制器、CRUD操作等...
gii是Yii框架提供的一个强大的代码生成器工具,它可以自动生成各种类型的代码,包括模型类、控制器、视图文件以及完整的CRUD(Create, Read, Update, Delete)操作。接下来,我们将详细介绍如何使用gii工具为商品...