基于角色的存取控制 (RBAC)

基于角色的存取控制 (RBAC) 提供了一个简单而强大的集中式存取控制机制。 详细的关于 RBAC 和诸多传统的存取控制方案对比的详情,请参阅 Wikipedia

Yii 实现了通用的分层的 RBAC,遵循的模型是 NIST RBAC model. 它通过 authManager application component 提供 RBAC 功能。

使用 RBAC 涉及到两部分工作。第一部分是建立授权数据, 而第二部分是使用这些授权数据在需要的地方执行检查。

为方便后面的讲述,这里先介绍一些 RBAC 的基本概念。

基本概念

角色是 权限 的集合 (例如:建贴、改贴)。一个角色 可以指派给一个或者多个用户。要检查某用户是否有一个特定的权限, 系统会检查该包含该权限的角色是否指派给了该用户。

可以用一个规则 rule 与一个角色或者权限关联。一个规则用一段代码代表, 规则的执行是在检查一个用户是否满足这个角色或者权限时进行的。例如,"改帖" 的权限 可以使用一个检查该用户是否是帖子的创建者的规则。权限检查中,如果该用户 不是帖子创建者,那么他(她)将被认为不具有 "改帖"的权限。

角色和权限都可以按层次组织。特定情况下,一个角色可能由其他角色或权限构成, 而权限又由其他的权限构成。Yii 实现了所谓的 局部顺序 的层次结构,包含更多的特定的  的层次。 一个角色可以包含一个权限,反之则不行。(译者注:可理解为角色在上方,权限在下方,从上到下如果碰到权限那么再往下不能出现角色)

配置 RBAC

在开始定义授权数据和执行存取检查之前,需要先配置应用组件 authManager 。 Yii 提供了两套授权管理器: yii\rbac\PhpManager 和 yii\rbac\DbManager。前者使用 PHP 脚本存放授权数据, 而后者使用数据库存放授权数据。 如果你的应用不要求大量的动态角色和权限管理, 你可以考虑使用前者。

使用 PhpManager

以下代码展示使用 yii\rbac\PhpManager 时如何在应用配置文件中配置 authManager

return [
// ...
'components' => [
'authManager' => [
'class' => 'yii\rbac\PhpManager',
],
// ...
],
];

现在可以通过 \Yii::$app->authManager 访问 authManager 。

yii\rbac\PhpManager 默认将 RBAC 数据保存在 @app/rbac 目录下的文件中。 如果权限层次数据在运行时会被修改,需确保WEB服务器进程对该目录和其中的文件有写权限。

使用 DbManager

以下代码展示使用 yii\rbac\DbManager 时如何在应用配置文件中配置 authManager

 return [
// ...
'components' => [
'authManager' => [
'class' => 'yii\rbac\DbManager',
// uncomment if you want to cache RBAC items hierarchy
// 'cache' => 'cache',
],
// ...
],
];

DbManager 使用4个数据库表存放它的数据:

  • itemTable: 该表存放授权条目(译者注:即角色和权限)。默认表名为 "auth_item" 。
  • itemChildTable: 该表存放授权条目的层次关系。默认表名为 "auth_item_child"。
  • assignmentTable: 该表存放授权条目对用户的指派情况。默认表名为 "auth_assignment"。
  • ruleTable: 该表存放规则。默认表名为 "auth_rule"。

继续之前,你需要在数据库中创建这些表。你可以使用存放在 @yii/rbac/migrations 目录中的数据库迁移文件来做这件事(译者注:根据本人经验,最好是将授权数据初始化命令也写到这个 RBAC 数据库迁移文件中):

yii migrate --migrationPath=@yii/rbac/migrations

 <?php
namespace backend\controllers; use Yii;
use yii\web\Controller;
class GoodsController extends Controller{
public $enableCsrfValidation=false;
public $layout=false;
//渲染頁面
public function actionIndex(){
$this->layout=false;
$id = yii::$app->user->getId();
$auth = Yii::$app->authManager;
$menu = $auth->getPermissionsByUser($id);
// echo "<pre>";
// var_dump($menu);
return $this->render('index',['menu'=>$menu]);
}
//商品添加
public function actionGoods_add()
{
if (Yii::$app->request->isPost) {
$data = Yii::$app->request->post();
$data['addtime'] = time();
$res = Yii::$app->db->createCommand()->insert('goods', $data)->execute();
if ($res) {
return $this->redirect(['goods/goods_list']);
} else {
$this->redirect(['goods/goods_add']);
}
}
return $this->render('goods_add');
}
//商品展示
public function actionGoods_list(){
$data = Yii::$app->db->createCommand('select * from goods')->queryAll();
return $this->render('goods_list',['data'=>$data]);
}
//刪除
public function actionGoods_del(){
$id = $_GET['id'];
if(Yii::$app->db->createCommand()->delete('goods', ['id'=>$id])->execute()){
return $this->redirect(['goods/goods_list']);
}
}
public function actionGoods_update(){
$id =yii::$app->request->get('id');
$name =yii::$app->request->get('name');
$price =yii::$app->request->get('price');
$stock =yii::$app->request->get('stock');
$data = Yii::$app->db->createCommand('SELECT * FROM goods')->queryOne();
$data = Yii::$app->db->createCommand()->update('goods', ['name' => $name],['price'=>$price],['syock'=>$stock],'id = $id')->execute();
return $this->render('goods_update',['data'=>$data]);
echo "<pre>";
var_dump($data);
}
}
 <?php
use yii\helpers\Url; ?>
<!DOCTYPE html>
<html> <head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="renderer" content="webkit"> <title> hAdmin- 主页</title> <meta name="keywords" content="">
<meta name="description" content=""> <!--[if lt IE 9]>
<meta http-equiv="refresh" content="0;ie.html" />
<![endif]--> <link rel="shortcut icon" href="favicon.ico"> <link href="css/static/css/bootstrap.min.css?v=3.3.6" rel="stylesheet">
<link href="css/static/css/font-awesome.min.css?v=4.4.0" rel="stylesheet">
<link href="css/static/css/animate.css" rel="stylesheet">
<link href="css/static/css/style.css?v=4.1.0" rel="stylesheet">
</head> <body class="fixed-sidebar full-height-layout gray-bg" style="overflow:hidden">
<div id="wrapper">
<!--左侧导航开始-->
<nav class="navbar-default navbar-static-side" role="navigation">
<div class="nav-close"><i class="fa fa-times-circle"></i>
</div>
<div class="sidebar-collapse">
<ul class="nav" id="side-menu">
<li class="nav-header">
<div class="dropdown profile-element">
<a data-toggle="dropdown" class="dropdown-toggle" href="#">
<span class="clear">
<span class="block m-t-xs" style="font-size:20px;">
<i class="fa fa-area-chart"></i>
<strong class="font-bold">hAdmin</strong>
</span>
</span>
</a>
</div>
<div class="logo-element">hAdmin
</div>
</li>
<li class="hidden-folded padder m-t m-b-sm text-muted text-xs">
<span class="ng-scope">商城</span>
</li>
<li>
<a class="J_menuItem" href="index_v1.html">
<i class="fa fa-home"></i>
<span class="nav-label">主页</span>
</a>
</li>
<li>
<a href="#">
<i class="fa fa fa-bar-chart-o"></i>
<span class="nav-label">商品表</span>
<span class="fa arrow"></span>
</a>
<ul class="nav nav-second-level">
<li>
<a class="J_menuItem" href="<?=Url::to(['goods/goods_add'])?>">添加商品</a>
</li>
<li>
<a class="J_menuItem" href="<?=Url::to(['goods/goods_list'])?>">商品展示</a>
</li>
</ul>
</li>
<li class="line dk"></li>
<li>
<a href="#">
<i class="fa fa fa-bar-chart-o"></i>
<span class="nav-label">商品分類表</span>
<span class="fa arrow"></span>
</a>
<ul class="nav nav-second-level">
<li>
<a class="J_menuItem" href="<?=Url::to(['types/types_add'])?>">添加商品分類</a>
</li>
<li>
<a class="J_menuItem" href="<?=Url::to(['types/types_list'])?>">商品分類展示</a>
</li>
</ul>
</li>
<li class="line dk"></li>
<li>
<a href="#">
<i class="fa fa fa-bar-chart-o"></i>
<span class="nav-label">自定義菜單</span>
<span class="fa arrow"></span>
</a>
<ul class="nav nav-second-level">
<li>
<a class="J_menuItem" href="<?=Url::to(['day/createmenu'])?>">創建菜單</a>
</li>
<li>
<a class="J_menuItem" href="<?=Url::to(['day/qurestmenu'])?>">查詢菜單</a>
</li>
<li>
<a class="J_menuItem" href="<?=Url::to(['day/deletemenu'])?>">刪除菜單</a>
</li>
</ul>
</li>
<li class="line dk"></li>
<li>
<a href="#">
<i class="fa fa fa-bar-chart-o"></i>
<span class="nav-label">菜單</span>
<span class="fa arrow"></span>
</a>
<ul class="nav nav-second-level"> <li>
<?php foreach ($menu as $key=>$val){?>
<a class="J_menuItem" href="<?=Url::to([$val->name])?>"><?=$val->description?></a>
<?php }?>
</li>
</ul>
</li>
</ul>
</div>
</nav>
<!--左侧导航结束-->
<!--右侧部分开始-->
<div id="page-wrapper" class="gray-bg dashbard-1">
<div class="row border-bottom">
<nav class="navbar navbar-static-top" role="navigation" style="margin-bottom: 0">
<div class="navbar-header"><a class="navbar-minimalize minimalize-styl-2 btn btn-info " href="#"><i class="fa fa-bars"></i> </a>
<form role="search" class="navbar-form-custom" method="post" action="search_results.html">
<div class="form-group">
<input type="text" placeholder="请输入您需要查找的内容 …" class="form-control" name="top-search" id="top-search">
</div>
</form>
</div>
<ul class="nav navbar-top-links navbar-right">
<li class="dropdown">
<a class="dropdown-toggle count-info" data-toggle="dropdown" href="#">
<i class="fa fa-envelope"></i> <span class="label label-warning">16</span>
</a>
<ul class="dropdown-menu dropdown-messages">
<li class="m-t-xs">
<div class="dropdown-messages-box">
<a href="profile.html" class="pull-left">
<img alt="image" class="img-circle" src="img/a7.jpg">
</a>
<div class="media-body">
<small class="pull-right">46小时前</small>
<strong>小四</strong> 是不是只有我死了,你们才不骂爵迹
<br>
<small class="text-muted">3天前 2014.11.8</small>
</div>
</div>
</li>
<li class="divider"></li>
<li>
<div class="dropdown-messages-box">
<a href="profile.html" class="pull-left">
<img alt="image" class="img-circle" src="img/a4.jpg">
</a>
<div class="media-body ">
<small class="pull-right text-navy">25小时前</small>
<strong>二愣子</strong> 呵呵
<br>
<small class="text-muted">昨天</small>
</div>
</div>
</li>
<li class="divider"></li>
<li>
<div class="text-center link-block">
<a class="J_menuItem" href="mailbox.html">
<i class="fa fa-envelope"></i> <strong> 查看所有消息</strong>
</a>
</div>
</li>
</ul>
</li>
<li class="dropdown">
<a class="dropdown-toggle count-info" data-toggle="dropdown" href="#">
<i class="fa fa-bell"></i> <span class="label label-primary">8</span>
</a>
<ul class="dropdown-menu dropdown-alerts">
<li>
<a href="mailbox.html">
<div>
<i class="fa fa-envelope fa-fw"></i> 您有16条未读消息
<span class="pull-right text-muted small">4分钟前</span>
</div>
</a>
</li>
<li class="divider"></li>
<li>
<a href="profile.html">
<div>
<i class="fa fa-qq fa-fw"></i> 3条新回复
<span class="pull-right text-muted small">12分钟钱</span>
</div>
</a>
</li>
<li class="divider"></li>
<li>
<div class="text-center link-block">
<a class="J_menuItem" href="notifications.html">
<strong>查看所有 </strong>
<i class="fa fa-angle-right"></i>
</a>
</div>
</li>
</ul>
</li>
</ul>
</nav>
</div>
<div class="row J_mainContent" id="content-main">
<iframe id="J_iframe" width="100%" height="100%" src="index_v1.html?v=4.0" frameborder="0" data-id="index_v1.html" seamless></iframe>
</div>
</div>
<!--右侧部分结束-->
</div> <!-- 全局js -->
<script src="css/static/js/jquery.min.js?v=2.1.4"></script>
<script src="css/static/js/bootstrap.min.js?v=3.3.6"></script>
<script src="css/static/js/plugins/metisMenu/jquery.metisMenu.js"></script>
<script src="css/static/js/plugins/slimscroll/jquery.slimscroll.min.js"></script>
<script src="css/static/js/plugins/layer/layer.min.js"></script> <!-- 自定义js -->
<script src="css/static/js/hAdmin.js?v=4.1.0"></script>
<script type="text/javascript" src="css/static/js/index.js"></script> <!-- 第三方插件 -->
<script src="css/static/js/plugins/pace/pace.min.js"></script>
<div style="text-align:center;">
<p>来源:<a href="http://www.mycodes.net/" target="_blank">源码之家</a></p>
</div>
</body> </html>
 <?php
use yii\helpers\Url;
?>
<!DOCTYPE html>
<html> <head> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <title> - 基本表单</title>
<meta name="keywords" content="">
<meta name="description" content=""> <link rel="shortcut icon" href="favicon.ico"> <link href="css/static/css/bootstrap.min.css?v=3.3.6" rel="stylesheet">
<link href="css/static/css/font-awesome.css?v=4.4.0" rel="stylesheet">
<link href="css/static/css/plugins/iCheck/custom.css" rel="stylesheet">
<link href="css/static/css/animate.css" rel="stylesheet">
<link href="css/static/css/style.css?v=4.1.0" rel="stylesheet">
</head>
<body class="gray-bg">
<div class="wrapper wrapper-content animated fadeInRight">
<div class="row">
<div class="col-sm-12">
<div class="ibox float-e-margins">
</div>
<div class="ibox-content">
<form method="post" class="form-horizontal">
<div class="form-group">
<label class="col-sm-2 control-label">商品分類</label>
<div class="col-sm-10">
<select class="form-control m-b" name="type_id">
<option value="1">家電</option>
<option value="2">海鮮</option>
<option value="3">生鮮</option>
<option value="4">酒水</option>
</select>
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label class="col-sm-2 control-label">商品名稱</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="name">
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label class="col-sm-2 control-label">商品價格</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="price">
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label class="col-sm-2 control-label">商品庫存</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="stock">
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label class="col-sm-2 control-label">商品分類</label>
<div class="col-sm-10">
<div class="radio i-checks">
<label>
<input type="radio" value="0" name="status"> <i></i>上架</label>
</div>
<div class="radio i-checks">
<label>
<input type="radio" value="1" name="status"> <i></i>下架</label>
</div>
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<div class="col-sm-4 col-sm-offset-2">
<button class="btn btn-primary" type="submit">添加</button>
<button class="btn btn-white" type="reset">重置</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<!-- 全局js -->
<script src="css/static/js/jquery.min.js?v=2.1.4"></script>
<script src="css/static/js/bootstrap.min.js?v=3.3.6"></script>
<!-- 自定义js -->
<script src="css/static/js/content.js?v=1.0.0"></script>
<!-- iCheck -->
<script src="css/static/js/plugins/iCheck/icheck.min.js"></script>
<script>
$(document).ready(function () {
$('.i-checks').iCheck({
checkboxClass: 'icheckbox_square-green',
radioClass: 'iradio_square-green',
});
});
</script>
</body>
</html>
 <?php
use yii\helpers\Url;
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title> - 基础表格</title>
<meta name="keywords" content="">
<meta name="description" content="">
<link rel="shortcut icon" href="favicon.ico"> <link href="css/static/css/bootstrap.min.css?v=3.3.6" rel="stylesheet">
<link href="css/static/css/font-awesome.css?v=4.4.0" rel="stylesheet">
<link href="css/static/css/plugins/iCheck/custom.css" rel="stylesheet">
<link href="css/static/css/animate.css" rel="stylesheet">
<link href="css/static/css/style.css?v=4.1.0" rel="stylesheet">
</head>
<body class="gray-bg">
<div class="wrapper wrapper-content animated fadeInRight">
<div class="row">
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>商品展示列表</h5>
<a href="<?=Url::to(['goods/goods_add'])?>"><button>添加商品</button></a>
</div>
<div class="ibox-content">
<div class="row">
<div class="col-sm-3">
<div class="input-group">
<input type="text" placeholder="请输入关键词" class="input-sm form-control"> <span class="input-group-btn">
<button type="button" class="btn btn-sm btn-primary"> 搜索</button> </span>
</div>
</div>
</div>
<div class="table-responsive">
<table class="table table-striped">
<thead>
<tr>
<th></th>
<th>編號</th>
<th>商品名稱</th>
<th>商品分類</th>
<th>商品價格</th>
<th>商品庫存</th>
<th>商品狀態</th>
<th>添加時間</th>
<th colspan="2">操作</th>
</tr>
</thead>
<tbody>
<?php foreach ($data as $key=>$val){?>
<tr>
<td></td>
<td><?=$val['id']?></td>
<td><?=$val['name']?></td>
<td><?=$val['type_id']?></td>
<td><?=$val['price']?></td>
<td><?=$val['stock']?></td>
<td><?=$val['status']?'上架':'下架'?></td>
<td><?=date("Y-m-d",$val['addtime'])?></td>
<td><a href="<?=Url::to(['goods/goods_del','id'=>$val['id']])?>">刪除</a></td>
<td><a href="<?=Url::to(['goods/goods_update','id'=>$val['id']])?>">編輯</a></td>
</tr>
<?php }?>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 全局js -->
<script src="css/static/js/jquery.min.js?v=2.1.4"></script>
<script src="css/static/js/bootstrap.min.js?v=3.3.6"></script>
<!-- Peity -->
<script src="css/static/js/plugins/peity/jquery.peity.min.js"></script>
<!-- 自定义js -->
<script src="css/static/js/content.js?v=1.0.0"></script>
<!-- iCheck -->
<script src="css/static/js/plugins/iCheck/icheck.min.js"></script>
<!-- Peity -->
<script src="js/demo/peity-demo.js"></script>
<script>
$(document).ready(function () {
$('.i-checks').iCheck({
checkboxClass: 'icheckbox_square-green',
radioClass: 'iradio_square-green',
});
});
</script>
</body>
</html>
 <?php
use yii\helpers\Url;
?>
<!DOCTYPE html>
<html> <head> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <title> - 基本表单</title>
<meta name="keywords" content="">
<meta name="description" content=""> <link rel="shortcut icon" href="favicon.ico"> <link href="css/static/css/bootstrap.min.css?v=3.3.6" rel="stylesheet">
<link href="css/static/css/font-awesome.css?v=4.4.0" rel="stylesheet">
<link href="css/static/css/plugins/iCheck/custom.css" rel="stylesheet">
<link href="css/static/css/animate.css" rel="stylesheet">
<link href="css/static/css/style.css?v=4.1.0" rel="stylesheet"> </head> <body class="gray-bg">
<div class="wrapper wrapper-content animated fadeInRight"> <div class="row">
<div class="col-sm-12">
<div class="ibox float-e-margins">
</div>
<div class="ibox-content">
<form method="post" class="form-horizontal">
<div class="form-group">
<label class="col-sm-2 control-label">商品分類</label>
<div class="col-sm-10">
<select class="form-control m-b" name="type_id">
<option value="1">家電</option>
<option value="2">海鮮</option>
<option value="3">生鮮</option>
<option value="4">酒水</option>
</select>
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label class="col-sm-2 control-label">商品名稱</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="name" value="<?=$data['name']?>">
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label class="col-sm-2 control-label">商品價格</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="price" value="<?=$data['price']?>">
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label class="col-sm-2 control-label">商品庫存</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="stock" value="<?=$data['stock']?>">
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label class="col-sm-2 control-label">商品分類</label>
<div class="col-sm-10">
<div class="radio i-checks">
<label>
<input type="radio" value="0" name="status"> <i></i>上架</label>
</div>
<div class="radio i-checks">
<label>
<input type="radio" value="1" name="status"> <i></i>下架</label>
</div>
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<div class="col-sm-4 col-sm-offset-2">
<button class="btn btn-primary" type="submit">修改</button>
<button class="btn btn-white" type="reset">重置</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<!-- 全局js -->
<script src="css/static/js/jquery.min.js?v=2.1.4"></script>
<script src="css/static/js/bootstrap.min.js?v=3.3.6"></script>
<!-- 自定义js -->
<script src="css/static/js/content.js?v=1.0.0"></script>
<!-- iCheck -->
<script src="css/static/js/plugins/iCheck/icheck.min.js"></script>
<script>
$(document).ready(function () {
$('.i-checks').iCheck({
checkboxClass: 'icheckbox_square-green',
radioClass: 'iradio_square-green',
});
});
</script>
</body>
</html>

yii框架RBAC權限管理的更多相关文章

  1. yii框架製作簡易RBAC權限管理

    控制器源碼 <?php namespace app\controllers; use yii; use yii\web\Controller; class PowerController ext ...

  2. Step by Step 設定 TFS 2012 Create Team Project 權限 - 避免 TF218017、TF250044

    基本上權限的設定和 以往的 TFS 沒有什麼太大的差別 只是這次的權限設定畫面有略作些調整,我還是一併整理一下 當我們用 TFSSetup 的帳號安裝完 TFS 2012 後 想要在自已的電腦上用自已 ...

  3. Yii框架中使用SRBAC作为权限管理模块时遇到的问题

    Yii框架中使用SRBAC作为权限管理模块时遇到的问题   看到Yii中提供RBAC的插件,SRBAC,就想用用. 结果按照手册上的安装办法,整来整去,安装完了,可就是进不了权限管理界面. 最后想到, ...

  4. [小技巧]設定Reporting Services 2008 發生報表管理員權限不足

    转载 http://www.dotblogs.com.tw/dorlis.tsao/archive/2011/01/17/20860.aspx 在自己Windows 7 professional的電腦 ...

  5. YII框架中的srbac权限管理模块的安全与使用(版本是1.1.20)

    0x01 前言 srbac的原理: YII框架的srbac模块是一个专门管理权限的一个模块,那它是怎么管理权限的呢.我们知道YII框架的网页显示是由控制器实现的,控制器继承父类CController和 ...

  6. YII框架源码分析(百度PHP大牛创作-原版-无广告无水印)

           YII 框架源码分析    百度联盟事业部——黄银锋 目 录 1. 引言 3 1.1.Yii 简介 3 1.2.本文内容与结构 3 2.组件化与模块化 4 2.1.框架加载和运行流程 4 ...

  7. yii框架

    Yii Framework是一个基于组件.用于开发大型 Web 应用的高性能 PHP 框架.Yii提供了今日Web 2.0应用开发所需要的几乎一切功能.Yii是最有效率的PHP框架之一.Yii是创始人 ...

  8. Yii框架tips(转)

    yii的一些小的技巧 http://www.yiichina.com/topic/151 db组件 'schemaCachingDuration'=>3600, 为什么不起做用?需要开缓存 如何 ...

  9. Yii框架tips

    db组件 'schemaCachingDuration'=>3600, 为什么不起做用?需要开缓存 如何在页面下边显示sql的查询时间在log组件的routes中加入 array('class' ...

随机推荐

  1. javascript中的原型和原型链(五)

    Array.prototype 先记住一句话——每一个函数,都有一个prototype属性——每一个函数,无论是你自定义的,还是系统内置的 var fn = function() {} console ...

  2. 51 Nod 不一样的猜字游戏

    1536 不一样的猜数游戏  题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 瓦斯亚和皮台亚在玩一个简单的游戏.瓦 ...

  3. Android Handler 内存泄漏问题

    1. 问题先看以下代码: 第一种写法: public class MainActivity extends AppCompatActivity { ... ... ... private class ...

  4. 利用MFC在控件内将txt中的数据画图

    1:采集txt文件中的数据测试程序如下: #include "stdafx.h" #include <fstream> #include "iostream& ...

  5. IDEA无法自动导入HttpServlet包问题解决

    全部都报红,连Alt + Enter都没有提示导包 这时候只需要IDEA右上角的这个键 再点击Libraries 选择添加 → Java 再把你Tomcat中对应的servlet-api.jar添加进 ...

  6. vue指令之v-cloak

    vue指令之v-cloak 一起学 vue指令 v-cloak  指令可看作标签属性 某些情况下可能由于机器性能故障或者网络原因,导致传输有问题,那么浏览器无法成功解析数据,此时浏览器输出的内容就是纯 ...

  7. Oracle_Windows server ORA-01031: insufficient privileges

    PS C:\Users\admin> sqlplus / as sysdba SQL*Plus: Release 11.2.0.1.0 Production on 星期二 9月 3 10:21: ...

  8. jenkins入门-----(1)安装、配置

    Jenkins概念 Jenkins是一个开源的.可扩展的持续集成.交付.部署(软件/代码的编译.打包.部署)的基于web界面的平台.允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构 ...

  9. EC

  10. [Flask]jinja2模板-宏的使用

    定义宏: macros.html <!DOCTYPE html> <html lang="en"> <head> <meta charse ...