yii2yii2 behaviorss 只能做更新时间吗

博客访问: 330326
博文数量: 32
博客积分: 1785
博客等级: 上尉
技术积分: 821
注册时间:
我,计算机应用技术嵌入式方向出身,从事软件工程师工作,主要负责linux服务器维护,asterisk呼叫中心服务器维护,ERP和CRM系统开发,pbx系统开发,以及网站建设。
希望能交更多的朋友。
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: PHP
授权是验证用户是否有足够的权限做一些事情的过程。 Yii提供控制它的几种方法。
访问控制基础(Access control basics)
Access control basics很简单实现使用[[yii\web\AccessControl]]:
class SiteController extends Controller
&& &public function behaviors()
&&&&&& &return [
&&&&&&&&&& &'access' => [
&&&&&&&&&&&&&& &'class' => \yii\web\AccessControl::className(),
&&&&&&&&&&&&&& &'only' => ['login', 'logout', 'signup'],
&&&&&&&&&&&&&& &'rules' => [
&&&&&&&&&&&&&&&&&& &[
&&&&&&&&&&&&&&&&&&&&&& &'actions' => ['login', 'signup'],
&&&&&&&&&&&&&&&&&&&&&& &'allow' => true,
&&&&&&&&&&& &&&&&&&&&&&&'roles' => ['?'],
&&&&&&&&&&&&&&&&&& &],
&&&&&&&&&&&&&&&&&& &[
&&&&&&&&&&&&&&&&&&&&&& &'actions' => ['logout'],
&&&&&&&&&&&&&&&&&&&&&& &'allow' => true,
&&&&&&&&&&&&&&&&&&&&&& &'roles' => ['@'],
&&&&&&&&&&&&&&&&&& &],
&&&&&&&&&&&&&& &],
&&&&&& &&&&&],
&&&&&& &];
&& &// ...
在上面的代码中,我们要附加的访问控制行为给控制器。因为只有指定的选项,它会被应用到'登录','退出',只有'注册'的行动。一组基本的选择规则[[yii\web\AccessRule]]内容如下:
让所有来宾(尚未验证)的用户访问“登录”和“注册”的行动。
允许通过验证的用户才能访问'注销'的行动。
规则检查一个接一个从顶部到底部。如果规则匹配,动作立即发生。如果没有,下一个规则进行检查。如果没有规则匹配的访问被拒绝。
[[yii\web\AccessRule]]&是相当灵活的,允许另外什么被证明检查IP地址和请求方法(即POST,GET)。如果不是的话,你可以通过匿名函数指定自己的检查:
class SiteController extends Controller
&& &public function behaviors()
&&&&&& &return [
&&& &&&&&&&&'access' => [
&&&&&&&&&&&&&& &'class' => \yii\web\AccessControl::className(),
&&&&&&&&&&&&&& &'only' => ['special-callback'],
&&&&&&&&&&&&&& &'rules' => [
&&&&&&&&&&&&&&&&&& &[
&&&&&&&&&&&&&&&&&&&&&& &'actions' => ['special-callback'],
&&&&&&&&&&& &&&&&&&&&&&&'allow' => true,
&&&&&&&&&&&&&&&&&&&&&& &'matchCallback' => function ($rule, $action) {
&&&&&&&&&&&&&&&&&&&&&&&&&& &return date('d-m') === '31-10';
&&&&&&&&&&&&&&&&&&&&&& &}
&&&&&&&&&&&&&&&&&& &],
&& &// ...
&& &// Match callback called! 此页面可以访问只有每个10月31日
&& &public function actionSpecialCallback()
&&&&&& &return $this->render('happy-halloween');
有时你想,当访问被拒绝采取自定义操作。在这种情况下,你可以指定denyCallback
基于角色的访问控制(RBAC)
基于角色的访问控制是非常灵活的方式来控制访问是一个完美的匹配的复杂系统中的权限是可以定制的。
使用基于文件的配置的RBAC
为了开始使用它,需要一些额外的步骤。首先,我们需要配置authManager应用程序组件在应用程序配置文件(web.php或main.php取决于你使用的模板):
'authManager' => [
&& &'class' => 'app\components\PhpManager',
&& &'defaultRoles' => ['guest'],
经常使用角色存储在同一个数据库表的其它用户数据。在这种情况下,我们可以将它定义通过创建自己的组件app/components/PhpManager.php
namespace app\components;
class PhpManager extends \yii\rbac\PhpManager
&& &public function init()
&&&&&& &parent::init();
&&&&&& &if (!Yii::$app->user->isGuest) {
&&&&&&&&&& &//我们假设用户的角色是存储在身份
&&&&&&&&&& &$this->assign(Yii::$app->user->identity->id, Yii::$app->user->identity->role);
use yii\rbac\Item;
&& &//这是你们的管理任务
&& &'manageThing0' => ['type' => Item::TYPE_OPERATION, 'description' => '...', 'bizRule' => NULL, 'data' => NULL],
&& &'manageThing1' => ['type' => Item::TYPE_OPERATION, 'description' => '...', 'bizRule' => NULL, 'data' => NULL],
&& &'manageThing2' => ['type' => Item::TYPE_OPERATION, 'description' => '...', 'bizRule' => NULL, 'data' => NULL],
&& &'manageThing3' => ['type' => Item::TYPE_OPERATION, 'description' => '...', 'bizRule' => NULL, 'data' => NULL],
&& &//过程中的作用
&& &'guest' => [
&&&&&& &'type' => Item::TYPE_ROLE,
&&&&&& &'description' => 'Guest',
&&&&&& &'bizRule' => NULL,
&&&&&& &'data' => NULL
&& &'user' => [
&&&&&& &'type' => Item::TYPE_ROLE,
&& &&&&&'description' => 'User',
&&&&&& &'children' => [
&&&&&&&&&& &'guest',
&&&&&&&&&& &'manageThing0', //用户可以编辑thing0
&&&&&& &],
&&&&&& &'bizRule' => 'return !Yii::$app->user->isG',
&&&&&& &'data' => NULL
&& &'moderator' => [
&&&&&& &'type' => Item::TYPE_ROLE,
&&&&&& &'description' => 'Moderator',
&&&&&& &'children' => [
&&&&&&&&&& &'user',&&&&&&& &//user能做的他都可以做
&&&&&&&&&& &'manageThing1', //用户可以编辑thing1
&&&&&& &],
&&&&&& &'bizRule' => NULL,
&&&&&& &'data' => NULL
&& &'admin' => [
&&&&&& &'type' => Item::TYPE_ROLE,
&&&&&& &'description' => 'Admin',
&&&&&& &'children' => [
&&&&&&&&&& &'moderator',&& &// 能做moderator可以做的所有东西
&&&&&&&&&& &'manageThing2', // 也可以管理 thing2
&&&&&& &],
&&&&&&&'bizRule' => NULL,
&&&&&& &'data' => NULL
&& &'godmode' => [
&&&&&& &'type' => Item::TYPE_ROLE,
&&&&&& &'description' => 'Super admin',
&&&&&& &'children' => [
&&&&&&&&&& &'admin',&&&&&& &// admin能做的都可以做
&&&&&&&&&& &'manageThing3', // 也可以管理 thing3
&&&&&& &],
&&&&&& &'bizRule' => NULL,
&&&&&& &'data' => NULL
现在,您可以从RBAC在控制器的访问控制配置指定的角色
public function behaviors()
&& &return [
&&&&&& &'access' => [
&&&&&&&&&& &'class' => 'yii\web\AccessControl',
&&&&&&&&&& &'except' => ['something'],
&&&&&&&&&& &'rules' => [
&&&&&&&&&&&&&& &[
&&&&&&&&&&&&&&&&&& &'allow' => true,
&&&&&&&&&&&&&&&&&& &'roles' => ['manageThing1'],
&&&&&&&&&&&&&& &],
&&&&&&&&&& &],
&&&&&& &],
另一种方法是调用[[yii\web\User::checkAccess()]]&在适当情况下:
使用DB为基础的存储RBAC
在数据库中存储的RBAC层次是低效率的浪费性能的,但要灵活得多。这是因为他比较容易创造一个良好的管理界面,所以如果你需要的权限结构是由最终用户管理的,数据库是您的首选。
在开始之前,你需要配置数据库连接的数据库组件,完成之后得到的&文件为您的数据库,并执行它。
下一步是配置authManager应用程序组件在应用程序配置文件(web.php或main.php这取决于你使用的模板):
'authManager' => [
&& &'class' => 'yii\rbac\DbManager',
&& &'defaultRoles' => ['guest'],
它是如何工作的
TBD:写一下它的工作原理与图片:)
避免过多的RBAC
为了保持权威性的层次结构简单、高效你应该避免创建和使用过多的节点。大多数时候,简单的检查可以用来代替。对于使用RBAC例如这样的代码
public function editArticle($id)
&$article = Article::find($id);
&if (!$article) {
&& &throw new NotFoundHttpException;
&if (!\Yii::$app->user->checkAccess('edit_article', ['article' => $article])) {
&& &throw new ForbiddenHttpException;
可以被替换为一个不使用RBAC的简单代码
public function editArticle($id)
&& &$article = Article::find(['id' => $id, 'author_id' => \Yii::$app->user->id]);
&& &if (!$article) {
&&&& &throw new NotFoundHttpException;
&& &// ...
本文翻译自:
阅读(27407) | 评论(2) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
Yii2.0中文开发向导——RBAC(基于角色的访问控制权限)表结构原理分析这也有一篇分析表结构的&/forum.php?mod=viewthread&tid=74&fromuid=2
请问Yii2的文档是您翻译的么?加我们的QQ群一起翻译吧?不是您原创的话,也加进来一起学习提高吧。Yii2兴趣小组,群号:
请登录后评论。yii 时间戳 - 我的异常网当前位置:& &&&yii 时间戳yii 时间戳&&网友分享于:&&&搜索量:176次
场景:Yii中models层的时间戳设立Yii中models层的时间戳设置
在yii中添加时间有两种方式一、在beforesave()方法中设置评价:相对麻烦二、在../models/xx.php中增加时间戳代码从Yii 1.1版本开始,Yii框架已经提供了一个CTimestampBehavior 行为类,只要设置好createAttribute和updateAttribute两个属性,,它分别对应你数据库表的创建时间和更新时间字段。像创建一篇文章时我们通常都会需要记录创建时间,更新时记录它的更新时间,详细使用,在你的Model类中behaviors 方法中增加下面几行, 将createAttribute和updateAttribute更改为你数据库对应的时间字段即可:
// 添加时间戳
public function behaviors()
return array(
'CTimestampBehavior'=&array(
'class' =& 'zii.behaviors.CTimestampBehavior',
'updateAttribute' =& null,
'createAttribute' =& 'created_at')
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关文章 12345678910 Copyright & &&版权所有yii2-behaviors | Extension | Yii PHP Framework
Yii 2.0: yii2-behaviors
1 follower
A collection of useful behaviors for Yii2.
Currently 2 behaviors are available, both for use with GridView.
- SaveGridPaginationBehavior
- SaveGridFiltersBehavior
The SaveGridPaginationBehavior keeps the last page number viewed in session so when the user gets back to the grid view, the last viewed page is shown.
The SaveGridFiltersBehavior keeps the last used filters in session. When the user gets back to the grid view, the filters are restored.
Checkout the
for instructions on how to install and use the behaviors: /marqu3s/yii2-behaviors
No downloadable files yet
Related Extensions
Yii Supporters
Copyright & 2016 by .
All Rights Reserved.Yii2.0的几大基本Behavior使用集合 - 教程 - Yii Framework 中文社区
Yii2.0的几大基本Behavior使用集合
1208次浏览
use yii\behaviors\AttributeB
use yii\behaviors\SluggableB
use yii\behaviors\BlameableB
use yii\behaviors\TimestampB
use yii\db\ActiveR
public function behaviors()
=& AttributeBehavior::className(),
'attributes' =& [
ActiveRecord::EVENT_BEFORE_INSERT =& 'status',
// ActiveRecord::EVENT_BEFORE_UPDATE =& 'attribute2',
=& function ($event) {
return '10';//填充值
* TimestampBehavior:
* 创建的时候,默认插入当前时间戳给created_at和updated_at字段
* 更新的时候,默认更新当前时间戳给updated_at字段
=& TimestampBehavior::className(),
'createdAtAttribute' =& 'created_at',
'updatedAtAttribute' =& 'updated_at',
// 'value'
=& time(),
* SluggableBehavior:
* 算是美化url的一种方法
* 通过填写title自动填充字段slug
* slug替换原本url中的参数部分,可以增加url的安全性。
=& SluggableBehavior::className(),
'attribute'
=& 'title',
'slugAttribute' =& 'slug',
* BlameableBehavior:
* 创建的时候,默认插入当前用户ID给author_id和updater_id字段
* 更新的时候,默认更新当前用户ID给updater_id字段
=& BlameableBehavior::className(),
'createdByAttribute' =& 'author_id',
'updatedByAttribute' =& 'updater_id',
// 'value'
=& Yii::$app-&user-&id,
以上操作如果出现不同见解、希望给出意见,谢谢。
非常好的东东,感谢分享。
共 1 条回复
主要是YII这个平台好,也是怕时间久了自己都会遗忘,所以记录下,有什么不对的,希望指出。谢谢
我没有用过这些特性,试试!
非常好 总结的不错 呱唧呱唧
您需要登录后才可以评论。 |作者:白狼 出处:&本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。原文有图片。日期组件,时间组件在平时开发中是必不可少的。今天我们就来谈谈在yii2中的超好用的时间组件,也省的大家各种找js插件了。
分享之前我们先预览下效果,看看到底怎么个好用法。当然啦,好用不好用在于自我的感觉,光看上面的图片是感受不到的。再告诉你个好消息,这两款插件已经跟yii2整合了,使用起来也是灰常的简单哦。关于日期组件跟时间组件,前者是date('Y-m-d')类型,后者是date('Y-m-d H:i:s')类型,自然不用多说。我们先来看看时间组件扩展既然是扩展组建,第一步当然是安装。
composer require kartik-v/yii2-widget-datetimepicker "*"
安装好之后,如果你的表单使用ActiveForm生成的,可以参考下面的代码
use kartik\datetime\DateTimeP
&?= $form-&field($model, 'created_at')-&widget(DateTimePicker::classname(), [
'options' =& ['placeholder' =& ''],
'pluginOptions' =& [
'autoclose' =& true,
'todayHighlight' =& true,
有些不喜欢用ActiveForm生成表单的同学就需要参考下面的用法了
use kartik\datetime\DateTimeP
echo '&label&时间&/label&';
echo DateTimePicker::widget([
'name' =& 'Article[created_at]',
'options' =& ['placeholder' =& ''],
//注意,该方法更新的时候你需要指定value值
'value' =& ' 22:10:10',
'pluginOptions' =& [
'autoclose' =& true,
'format' =& 'yyyy-mm-dd HH:ii:ss',
'todayHighlight' =& true
至于哪个方便,不言而喻。
整个安装过程确实很简单,我们接下来以同样的方式进行安装日期组件。
阅读(...) 评论()}

我要回帖

更多关于 yii2 behaviors verbs 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信