ThinkPHP学习笔记(十九)权限管理的实现方式RBAC

【PHP项目实战训练】——后台-RBAC权限管理原理 👨‍💻。 阅读详情


Action的方法

<?php
/**
 * 基于权限的角色访问控制
 * Full扩展保重的RBAC.class.php
 * 
 * 安全拦截器
 * 
 * 认证管理器(识别不同身份)
 * 
 * 决策访问管理器(即时模式:立即生效;登录模式:下次登录时生效)
 * 
 * 运行身份管理(单身份、多身份管理B/S)
 * 
 * 
 * 需要当前类和Public和Common类
 * PublicAction:做用户登录和退出
 * CommonAction:初始化接口,需要在这个里面写上一个初始化接口来实现对权限的认证和修改,每个方法都会经过他’
 * 		如果不需要验证的模块,则不需要继承CommonAction
 * 1.去RBAC.class.php中拷贝需要创建的数据库表
 * 		需要修改access表,加入`pid` int(11) NOT NULL,这个字段
		CREATE TABLE IF NOT EXISTS `think_access` (
		  `role_id` smallint(6) unsigned NOT NULL,
		  `node_id` smallint(6) unsigned NOT NULL,
		  `level` tinyint(1) NOT NULL,
		  `module` varchar(50) DEFAULT NULL,
		  `pid` int(11) NOT NULL,
		  KEY `groupId` (`role_id`),
		  KEY `nodeId` (`node_id`)
		) ENGINE=MyISAM DEFAULT CHARSET=utf8;
		
		CREATE TABLE IF NOT EXISTS `think_node` (
		  `id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
		  `name` varchar(20) NOT NULL,
		  `title` varchar(50) DEFAULT NULL,
		  `status` tinyint(1) DEFAULT '0',
		  `remark` varchar(255) DEFAULT NULL,
		  `sort` smallint(6) unsigned DEFAULT NULL,
		  `pid` smallint(6) unsigned NOT NULL,
		  `level` tinyint(1) unsigned NOT NULL,
		  PRIMARY KEY (`id`),
		  KEY `level` (`level`),
		  KEY `pid` (`pid`),
		  KEY `status` (`status`),
		  KEY `name` (`name`)
		) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
		
		CREATE TABLE IF NOT EXISTS `think_role` (
		  `id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
		  `name` varchar(20) NOT NULL,
		  `pid` smallint(6) DEFAULT NULL,
		  `status` tinyint(1) unsigned DEFAULT NULL,
		  `remark` varchar(255) DEFAULT NULL,
		  PRIMARY KEY (`id`),
		  KEY `pid` (`pid`),
		  KEY `status` (`status`)
		) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
		
		CREATE TABLE IF NOT EXISTS `think_role_user` (
		  `role_id` mediumint(9) unsigned DEFAULT NULL,
		  `user_id` char(32) DEFAULT NULL,
		  KEY `group_id` (`role_id`),
		  KEY `user_id` (`user_id`)
		) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 * 
 * 2.创建用户表的必须字段:id、username、password
 * 		五张表的对应关系:
 * 			节点表:think_node
 * 			权限表: think_access(
 * 				项目模块和方法之间的关系;
 * 				用户访问项目(level为1)、模块(level为2)、方法(level为3)直接的关系用节点来表示)
 * 			权限组:think_role
 * 			用户表:tb_user
 * 			用户和组的对应关系:think_role_user
 * 		access控制组与模块方法的关系
 * 3.修改配置文件
 * 4.修改CommonAction
 * 5.当前方法需要继承CommonAction
 */
class RbacAction extends CommonAction{
    public function index(){
    }
    public function add(){
    }
    public function update(){
    }
    public function delete(){
    }
}
?>

下面上一下五张表的数据

tb_user:用户表

Role权限组表

role_user:权限组与用户的对应关系表

node表:表示当前项目中url分类,精确到每个方法的控制

access表:表示不同用户组对应的可以访问的不同url分类

config中需要设置的参数:


//设置rbac的参数
	'USER_AUTH_ON'=>true,
	'USER_AUTH_TYPE'			=>1,		// 默认认证类型 1 登录认证 2 即使认证
	'USER_AUTH_KEY'			=>'authId',	// 用户认证SESSION标记
    'ADMIN_AUTH_KEY'			=>'administrator',//管理员标识
	'USER_AUTH_MODEL'		=>'User',	// 默认验证数据表模型
	'AUTH_PWD_ENCODER'		=>'md5',	// 用户认证密码加密方式
	'USER_AUTH_GATEWAY'	=>'/Public/login',	// 默认认证网关
	'NOT_AUTH_MODULE'		=>'Public',		// 默认无需认证模块
	'REQUIRE_AUTH_MODULE'=>'',		// 默认需要认证模块
	'NOT_AUTH_ACTION'		=>'',		// 默认无需认证操作
	'REQUIRE_AUTH_ACTION'=>'',		// 默认需要认证操作
    'GUEST_AUTH_ON'          => false,    // 是否开启游客授权访问
    'GUEST_AUTH_ID'           =>    0,     // 游客的用户ID(可以在数据库组中设置一个id为0的游客组)
	'SHOW_RUN_TIME'=>true,			// 运行时间显示
	'SHOW_ADV_TIME'=>true,			// 显示详细的运行时间
	'SHOW_DB_TIMES'=>true,			// 显示数据库查询和写入次数
	'SHOW_CACHE_TIMES'=>true,		// 显示缓存操作次数
	'SHOW_USE_MEM'=>true,			// 显示内存开销
    'DB_LIKE_FIELDS'=>'title|remark',
	'RBAC_ROLE_TABLE'=>'think_role',
	'RBAC_USER_TABLE'	=>	'think_role_user',
	'RBAC_ACCESS_TABLE' =>	'think_access',
	'RBAC_NODE_TABLE'	=> 'think_node',

PublicAction中需要设置的公共访问方法;(命名基于配置中的NOT_AUTH_MODULE的配置)

<?php
/**
 * 基于权限的角色访问控制
 * Full扩展保重的RBAC.class.php
 * 主要用于登录和退出
 *
 */
class PublicAction extends Action{
    public function index(){
    	$this->login();
    }
    public function login(){
    	$this->display();
    }
    //可以去例子中复制
    public function checkLogin(){
		if(empty($_POST['username'])) {
			$this->error('帐号错误!');
		}elseif (empty($_POST['password'])){
			$this->error('密码必须!');
//		}elseif (empty($_POST['verify'])){
//			$this->error('验证码必须!');
		}
        //生成认证条件
        $map            =   array();
		// 支持使用绑定帐号登录
		$map['username']	= $_POST['username'];
//        $map["status"]	=	array('gt',0);
//		if($_SESSION['verify'] != md5($_POST['verify'])) {
//			$this->error('验证码错误!');
//		}
		import ( 'ORG.Util.RBAC' );
        $authInfo = RBAC::authenticate($map);
        //使用用户名、密码和状态的方式进行认证
        if(false === $authInfo) {
            $this->error('帐号不存在或已禁用!');
        }else {
            if($authInfo['password'] != md5($_POST['password'])) {
            	$this->error('密码错误!');
            }
            $_SESSION[C('USER_AUTH_KEY')]	=	$authInfo['id'];
//            $_SESSION['email']	=	$authInfo['email'];
//            $_SESSION['loginUserName']		=	$authInfo['nickname'];
//            $_SESSION['lastLoginTime']		=	$authInfo['last_login_time'];
//			$_SESSION['login_count']	=	$authInfo['login_count'];
            if($authInfo['username']=='admin') {
            	$_SESSION['administrator']		=	true;
            }
            //保存登录信息
//			$User	=	M('User');
//			$ip		=	get_client_ip();
//			$time	=	time();
//            $data = array();
//			$data['id']	=	$authInfo['id'];
//			$data['last_login_time']	=	$time;
//			$data['login_count']	=	array('exp','login_count+1');
//			$data['last_login_ip']	=	$ip;
//			$User->save($data);

			// 缓存访问权限
            RBAC::saveAccessList();
			$this->success('登录成功!');

		}
    }
    //可以去例子中复制
    public function loginout(){
        if(isset($_SESSION[C('USER_AUTH_KEY')])) {
			unset($_SESSION[C('USER_AUTH_KEY')]);
			unset($_SESSION);
			session_destroy();
            $this->assign("jumpUrl",__URL__.'/login/');
            $this->success('登出成功!');
        }else {
            $this->error('已经登出!');
        }
    }
}
?>

CommonAction中设置所有url的过滤方法

<?php
/**
 * ThinkPHP中的
 * 让其他的Action继承当前的CommonAction就可以了
 */
class CommonAction extends Action{
	//去文档的模型扩展看(_initialize方法可以去例子中查找)
		function _initialize() {
		// 用户权限检查
		if (C ( 'USER_AUTH_ON' ) && !in_array(MODULE_NAME,explode(',',C('NOT_AUTH_MODULE')))) {
			import ( 'ORG.Util.RBAC' );
			if (! RBAC::AccessDecision ()) {
				//检查认证识别号
				if (! $_SESSION [C ( 'USER_AUTH_KEY' )]) {
					//跳转到认证网关
					redirect ( PHP_FILE . C ( 'USER_AUTH_GATEWAY' ) );
				}
				// 没有权限 抛出错误
				if (C ( 'RBAC_ERROR_PAGE' )) {
					// 定义权限错误页面
					redirect ( C ( 'RBAC_ERROR_PAGE' ) );
				} else {
					if (C ( 'GUEST_AUTH_ON' )) {
						$this->assign ( 'jumpUrl', PHP_FILE . C ( 'USER_AUTH_GATEWAY' ) );
					}
					// 提示错误信息
					$this->error ( L ( '_VALID_ACCESS_' ) );
				}
			}
		}
	}
	
	
	
	public function verify(){
		//导入验证码类
		//方式一:
		import('ORG.Util.Image');
		//方式二:@代表当前项目的lib文件夹(需要自己复制或者自己写一个新的类)
//		import('@.ORG.Image')
//		Image::buildImageVerify();
		
		//扩展修改 
		/**
		 * @param string $length  位数
		 * @param string $mode  类型(0字母,1数字,2大写字母,3小写字母,4中文,5混合)
		 * @param string $type 图像格式
		 * @param string $width  宽度
		 * @param string $height  高度
		 * buildImageVerify($length=4,$mode=1,$type='png',$width=48,$height=22,$verifyName='verify')
		 */
		Image::buildImageVerify(5,5,'png',80,22);
		//中文验证码(2.0会有一个问题:msubstr有错误)
		//1.修改function::msubstr
		//2.加入字体ttf需要放入image同级目录之下
		//扩展可以去类文件中查看
//		Image::GBVerify();
	}
}
?>

Public文件夹下的login。html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

<form action="__URL__/checklogin" method="post">
	用户名:<input type="text" name="username"><br/>
	密码:<input type="text" name="password"><br/>
	<input type="submit" value="登录"><br/>
</form>
</body>
</html>


Thinkphp中的RBAC使用详解 1.什么是RBAC:             基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注。在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容 阅读详情

相关推荐

ThinkPHP中权限控制的详细解析与实例演示

通过配置权限控制参数、定义节点和角色、进行访问控制设置以及用户角色关联,我们可以灵活地管理系统中的权限,并确保用户只能访问其具备权限的功能模块。ThinkPHP是一款流行的PHP框架,提供了许多功能强大的特性,包括灵活的权限控制机制。在本文中,我们将深入探讨ThinkPHP中的AUTH权限控制,同时提供相应的源代码示例。节点代表了系统中的具体功能,而角色则定义了用户在系统中的权限级别。通过定义节点和角色,并进行访问控制的设置,我们可以灵活地管理系统中的权限,并确保用户只能访问其具备权限的功能模块。

DsJustintime的博客 736

php之 角色的权限管理(RBAC)详解

RBAC模型在商业应用中得到了广泛的使用,可以有效地管理用户的权限,减少系统管理的负担,提高系统安全性,是一种很受欢迎的权限管理模型。php之 角色的权限管理(RBAC)详解

php-yyds 2215

phprbac:PHP基于角色的访问控制库-开源

RBAC(基于角色的访问控制)是授权和访问控制中的事实上的标准,因为它比传统的ACL更易于维护和使用。 不幸的是,由于内部结构复杂,没有很多可用的实现。 PHP RBAC与NIST 2级RBAC标准兼容,并且甚至提供了更多功能,并具有可用于任何授权库及其PHP的最佳性能。 注意:开发和支持已移至Github(https://github.com/OWASP/rbac)。 新版本将继续在SF上发布。

SpringCloud微服务架构前后端分离项目实践

一款 Java 语言基于 SpringCloud、Vue、ElementUI、MySQL等框架精心打造的一款前后端分离框架,致力于实现模块化、组件化、可插拔的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后台管理系统,本着简化开发、提升开发效率的初衷,目前框架已集成了完整的RBAC权限架构和常规基础模块,前端Vue端支持多主题切换,可以根据自己喜欢的风格选择想一个的主题的个性化呈现的需

weixin_50196917的博客 5686

Selenium实战:突破反爬,自动化抓取国家知识产权局专利数据

网络爬虫是数据采集的核心技术,其原理是通过程序模拟浏览器行为,自动访问网页并提取结构化信息。在数据驱动决策的今天,高效获取公开数据对市场分析、技术调研和竞争情报至关重要。然而,面对广泛应用的JavaScript动态渲染和反爬虫机制,传统的静态页面抓取方法往往失效。Selenium作为浏览器自动化工具,通过驱动真实浏览器执行JavaScript,能够有效绕过前端反爬,实现“可见即可得”的数据抓取,在需要与页面进行复杂交互或处理动态内容的场景中价值显著。本文以【专利数据】抓取为例,结合【Selenium】工具,

weixin_33881140的博客 392

【论文笔记】Beyond Low-frequency Information in Graph Convolutional Networks

文章目录1. Abstract2. Introduction低频和高频信号作用FAGCN怎么设计3. An Experimental Investigation4. Model4.1 filter定义4.2 Aggregation4.3 Problems of signal combination4.4 Spatial vision of FAGCN4.5 系数αijG\alpha_{i j}^{G}αijG​4.6 模型整体框架FAGCN的表达能力实验 本文发表在AAAI-21上 论文地址:https:

Running Snail 5602

php实战开发管理系统,深入浅出PHP框架Thinkphp实战开发(权限管理、CMS内容管理系统)...

Thinkphp课程大纲:ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议公布,是为了敏捷WEB应用开发跟简化企业应用开发而诞生的。ThinkPHP从诞生以来始终秉持简约实用的设计原则,在保持出众的功耗跟至简的代码的同时php框架开发 实战视频教程,也重视易用性。并且拥有诸多的原创功能跟特点,在社区团队的积极参与下,...

weixin_39890332的博客 245

iPhone免越狱Git服务器搭建教程-iSH

iPhone免越狱Git服务器搭建教程

jts666的博客 4427

ThinkPHP的RBAC(基于角色权限控制)详解

一、什么是RBAC 基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注。 在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。 在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角...

weixin_30823683的博客 805

三极管共集电极放大电路详解:射极跟随器的原理、计算与应用

三极管放大电路是模拟电子技术的基石,常见组态包括共发射极、共基极和共集电极。其中共集电极电路因输入电阻大、输出电阻小、电压增益接近1的特性,常被用作射极跟随器,在信号缓冲、级间隔离和低阻抗负载驱动等场景中发挥关键作用。其核心价值并非电压放大,而是完成阻抗变换,将高内阻信号源转换为低内阻输出,同时保持信号幅值基本不变。理解其静态工作点计算与动态参数推导(如电压增益、输入输出电阻)是设计实用电路的前提。本文结合12V电源下的具体设计实例和仿真验证,梳理了从电路识别、参数计算到工程实践的完整流程,并指出常见设计误

weixin_29193259的博客 367

【传感器模块项目实战】机器人/无人驾驶常用传感器模型、选型与安装

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!无人车&无人机导航合集本文先对机器人/无人驾驶常用传感器模型、选型与安装做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容分为位置式绝对型编码器增量式编码器打比赛的时候用过欧姆龙的增量式编码器,也用过待编码器的步进电机。【防盗标记–盒子君hzj】增量式编码器正交编码输出信号,用于识别正转和反转,通过微控制器(单片机)的片内外设硬件/软件解码(1)惯性器件-机械陀螺。

qq_35635374的博客 448

thinkphp mysql权限管理_TP thinkphp 权限管理 权限认证 功能

目前,在tp框架中做权限管理 分rbac(老)与auth(推荐)认证方式;老的tp版本中封装的是rbac认证;新一点的都开始使用auth方式管理了。推荐使用此方式;实现步骤一:引入类库Auth.class.php实现步骤二:创建数据表实现步骤三:项目配置文件config.php中添加'AUTH_CONFIG'=>array('AUTH_ON' => true, //认证开关'AUTH_...

weixin_34614567的博客 302

柑橘病虫害识别方案总结

1. 方案一 1.1 赛题背景 1.2 数据分析 1.3 模型设计 1.3.1 模型具体方案 1.3.2 模型设计 1.4 实验结果 1.5 总结与展望 2. 方案二 2.1 赛题介绍 2.2 数据分析 2.3 算法方案解析 2.3.1 检测模型 2.3.2 提升策略 2.4 优化思路 3. 方案三 3.1 数据分析 3.1.1 数据说明 3.2 技术展示 3.2.1 数据输入端 3.2.2 模型结构端 3.2.3 上下文信息 3.2.4 训练优化端 3.2.5 创新性分析 3.3 算法及系统思考.....

herosunly的博客 2万+

PHP权限管理(RBAC)的实现

在PHP中实现基于角色的访问控制(RBAC, Role-Based Access Control)涉及多个步骤,包括用户管理、角色定义、权限分配以及验证和授权机制。

sheji888的专栏 1579

把 ABAP 经验装进 GitHub Copilot 的按需大脑,Agent Skills 如何改变 ABAP 开发

2026 年 8 月,SAP Community 上出现了一次很有代表性的 ABAP 实验。开发者把标准 Flight Model 里的复制成自己的测试类,删除原有 ABAP Unit Test,再让 GitHub Copilot Agent 为方法重新生成测试代码。真正有意思的地方并不是 Copilot 会不会写,而是开发者给 Copilot 准备了两个专门的 Agent Skills,一个负责 ABAP Unit Test 的通用规则,一个负责 ABAP Test Double Framework。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 154

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Thinkphp中的RBAC权限验证

一、相关概念 访问控制与RBAC模型 1、访问控制: 通常的多用户系统都会涉及到访问控制,所谓访问控制,是指通过某种方式允许活限制用户访问能力及范围的一种方法。这主要是由于系统需要对关键资源进行保护,防止由于非法入侵或者误操作对业务系统造成破坏。简而言之,访问控制即哪些用户可以访问哪些资源。 一般而言,访问控制系统包括三个组成部分: 主体:发出访问请求的实体,通常指用户或者用户进程。

此岸情,彼岸花。 785

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

PHP-人员权限管理(RBAC)

权限管理可以想做vip的功能,普通用户和vip用户的功能是不一样的,大致会用到五张表:用户表、角色表、功能表,还有他们之间。6.最后就是保存修改后的值了,可以直接用全部删除在重新写入的方法来进行值的选择;4.这样,再考虑怎么让数据库中用户本有的角色显示出来,那就是要用到下拉列表和复选框的值了。2.登录处理的页面 dlchuli.php。二.完成管理员页面后,下面就是登录页面。3.保存的处理页面 add.php。联的表:用户与角色表、角色与功能表。3.主页面 main.php。一.首先写的是管理员页面。

withoutfear的博客 1011

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

ThinkPHP5权限管理

自己写的权限管理,大致思路:用户登陆成功之后,查出该用户的权限列表,并把权限列表存到session中,进入系统后,再判断该模块是否在session中,如果存在就说明有该权限,就显示出来,如果没有就说明没有该权限,就不显示。 可以按角色分配权限,也可以给某个人自定义权限,需要给角色分配权限时,把用户的权限id插入到两张表中(用户表的权限id,角色表中的权限id),最后取出的权限是从用户表中的权限i...

qq_25285531的博客 391

php rbac实现,php实现rbac权限管理

php实现rbac权限管理介绍:RBAC(Role-Based Access Control)基于角色的权限管理方式。RBAC的最大特征就是将权限跟角色挂钩,用户又跟角色挂钩。优点: ①管理维护上比较容易; ②在项目开发初期,权限体系就已经有成型的标准;所以一般在大型网站的后台都会使用RBAC权限分配方式进行管理。这种权限到底是怎么实现的呢?看下图表的关系代码的具体实现:1:根据用户的role_i...

weixin_39586265的博客 940

thinkphp mysql权限管理_tp5.1 Auth类实现权限管理

了解来这么久权限控制权限的知识,却不知道如何写代码,网上的代码多数并没有多少完整的源码能提供参考。偶然看到官网的例子,现在终于也把源码的实现也弄得明白了一点。tp5框架的Auth类可以实现页面的访问权限,还可以精确到页面上的按钮。页面访问主要靠rule表的name字段。附加条件权限主要看condition字段。源码下载:https://files.cnblogs.com/files/mzzone/...

weixin_34336068的博客 610

php人员权限管理(RBAC),php 人员权限管理(RBAC)

一、想好这个权限是什么?就做一个就像是vip的功能,普通用户和vip用户的功能是不一样的,先来考虑一下数据库怎么设计肯定要有用户表、还有用户所用的角色、然后就是权限功能表;可是在这里面有关联也就 是会另外有两张相互关联的表,这样也就是5张表在数据库中建好这五张表:(1)用户表、角色表、功能表 (2)主表中的外键关系得两个表:用户与角色表、角色与功能表 二、建好表之后就是开始写代码了,...

weixin_30939909的博客 536

thinkphp全局拦截器的实现----------小白的天堂

最近在学习在用thinkphp框架写后台,然后想实现自动拦截所有的前台请求,然后判断前台请求是否符合条件,不符合条件的拦截下来返回错误数据,符合条件的自动放行。 当然,你可以在每个请求中判断一个,但是这样的方式是不是太笨重了呢,代码冗长而且不方便管理。 通过查阅了很多资料并经过本人亲测有两个非常有效的方法和大家分享: 首先,要实现全局拦截,顾名思义,肯定是有一个公共类文件,然后其他类文件都继承这个类文件,而要保证每次请求进入当前类文件的时候都要调用同一个方法才行,这里有一个非常重要的函数_initializ

Mr.wang的博客 3214

thinkPHP中关于RBAC使用详解

RBAC是什么,能解决什么难题? RBAC是Role-Based Access Control的首字母,译成中文即基于角色的权限访问控制,说白了也就是用户通过角色与权限进行关联[其架构灵感来源于操作系统的GBAC(GROUP-Based Access Control)的权限管理控制]。简单的来说,一个用户可以拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。

heshi_yao的专栏 1663

基于Thinkphp框架的RBAC权限分配的购物商城平台的设计与实现(附源码 调试 文档)

摘要本文介绍了一种基于Thinkphp框架的RBAC权限分配的购物商城平台的设计与实现。该系统分为管理员和会员用户两种角色,分别具有不同的功能。管理员主要负责RBAC管理(用户管理,角色管理,节点管理)、会员管理、分类管理、商品管理、订单管理、品牌管理和系统管理。会员用户则可以通过分类筛选、商品搜索、在线下单、购物车、我的订单和个人信息管理等功能进行购物。系统采用PHP语言和Thinkphp框架进行开发,并使用mysql数据库进行数据存储。

409
上一篇: ThinkPHP学习笔记(十八)数据库表的关联操作
下一篇: ThinkPHP学习笔记(二十)模板中使用函数和标签
阳小良
博客等级 码龄17年 54粉丝 155原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值