基于角色的存取控制 (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. SpringBoot项目中,WebSocket的使用(观察者设计模式)

    1.什么是WebSocket(选择至菜鸟教程(点击跳转),观察者模式) WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. WebSocket 使得客户端和 ...

  2. 暑假集训#2 div1 J 四点直角 J - Space Invader 四点共面+跨立实验

    题意:给你四个点,判断能否先依次通过A,B两点,然后再在某个地方只进行一次直角转弯再一次经过C,D两点: #include <iostream> #include <cstdio&g ...

  3. 如何基于String实现同步锁?

    在某些时候,我们可能想基于字符串做一些事情,比如:针对同一用户的并发同步操作,使用锁字符串的方式实现比较合理.因为只有在相同字符串的情况下,并发操作才是不被允许的.而如果我们不分青红皂白直接全部加锁, ...

  4. 深入理解java集合

    集合 Java集合分为三大接口:①Collection ②Map ③Iterator

  5. SpringBoot中application.yml基本配置详情

    把原有的application.properties删掉.然后 maven -X clean install,或者通过Maven Project双击clean和install(1)端口服务配置 #端口 ...

  6. python源码

    初学者 GitHub - kennethreitz/pip-pop: Tools for managing requirements files. GitHub - kennethreitz/envo ...

  7. luoguP1502过河题解

    日常吐(fei)嘈(hua) 这道题作为最近卡了我3天的dp题(最后还是在题解的帮助下冥思苦想才过掉的题),窝觉得此题肥肠之脑洞,写此博客纪念 题解 过河 先来日常手玩样例: 咦感觉怎么手玩答案都像是 ...

  8. 【Python】格式化输出json

    参考文档: Python JSON JSON 函数 使用 JSON 函数需要导入 json 库:import json. 函数 描述 json.dumps  将 Python 对象编码成 JSON 字 ...

  9. django写原生sql语句

    执行自定义SQL语言: from django.db import connection ​ cursor=connection.cursor() ​ # 插入操作 cursor.execute(&q ...

  10. W3C验证工具

    HTML验证工具:http://validator.w3.org/ CSS验证工具:http://jigsaw.w3.org/css-validator/