• 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库
没有结果
查看所有结果
  • 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库
没有结果
查看所有结果
没有结果
查看所有结果

TP5 商城(二)RBAC、权限增删改查、角色增删改查、不同用户显示不同后台、权限防翻墙

Mr.Lee 由 Mr.Lee
2018年6月11日
在 TP5.0, TP5.0商城, 后台框架
0
TP5 商城(一)环境部署、数据表、后台首页、用户 CURD、Ajax 状态切换、后台登录、后台退出、后台防翻墙、RBAC
0
分享
4
浏览

一、RBAC功能实现

权限表的curd操作

(1)完成权限的添加

步骤1:在后台建立一个Auth控制器,并建立一个add方法,输出模板内容,并完成添加权限的实现

同时在Auth模型中取出权限的无限级分类数据:

步骤2:设置add.html模板内容

当选择顶级权限时,控制器名和方法名不可用,否则可用。因为顶级权限没有控制器名和方法名。

注意:表单input设置disabled和readonly的区别

相同点:都不可以编辑input中的数据

不同点:设置disabled时,php中通过$_POST接收不到input框name的属性值

设置readonly时,php中通过$_POST可以收到input的name的属性值

步骤3:定义Auth验证器,进行验证

模板效果:

完成权限的列表展示

步骤1:在后台的Auth控制器中建立一个index方法,取出所有的权限数据,分配到模板中。

注:需要指定getAuthsSon方法返回的结果下标值:

步骤:模板中遍历数据

效果:

完成权限的编辑

编辑一个角色注意的地方:

a、不能以当前分类作为父权限 b.不能以当前子孙作为父权限

步骤1:修改编辑的链接地址

步骤2:在Auth控制器建立一个upd的完成编辑功能

步骤3:模板回显数据

步骤4:需要考虑编辑注意的地方

a、不能以当前分类作为父权限 b.不能以当前子孙作为父权限

解决办法:通过js递归实现,把当前权限以及子孙权限给删除即可。

【作业】完成权限的删除

自行完成

未考虑子分类 直接删除全部

角色表的curd操作

分析:

  • 用户表通过角色字段role_id,找到与其关联的角色表role_id。
  • 角色表通过所拥有的所有权限字段auth_id_list,找到与其关联的权限表的auth_id。

添加角色及分配权限

步骤1:在后台建立一个Role控制器,并建立一个add方法,获取所有的权限

我们这里取出所有的权限需要一定技巧,两个:

技巧一:取出所有的权限:并且以auth_id为每个元素的下标。

技巧二:取出所有的权限,通过pid进行分组,把具有相同的pid划分为同一组

其中上面变量$auths和$children的打印结果如下:

其中pid=0,有两个元素即auth_id为46和49。其他以此类推。

步骤2:模板中遍历权限,这里需要参考课件的权限布局文件:

注意:如下一级中有个二级,二级中有三级、

结果如下:

步骤3:进行添加权限入库

同时给表角色表添加模型和验证器

模型:

验证器:

数据库存储的格式:

注:一般系统角色名为超级管理员都会拥有所有的权限,其权限字段auth_id_list可以手动设置为*。

(2)完成添加权限分配的特效操作

role/add.html模板文件:

特效代码:

效果:

(3)【重要】小结

  1. 记住,以后去公司做有关权限分配的时候,可以直接参考以下的模板布局

b、以后在模板中凡是需要取出含有(父子孙)层级关系的数据,可以使用下面这个技巧。

技巧一:取出所有的权限:并且以auth_id为每个元素的下标。

技巧二:取出所有的权限,通过pid进行分组,把具有相同的pid划分为同一组

此技巧的典型使用场景有:

  1. 如遍历权限可以用到,上面代码就是。

  1. 如京东商城遍历三级分类菜单

3、分类菜单的折叠

(4)角色的列表展示

把一个角色所拥有的权限都查出来,这里需要利用到两个mysql函数:

FIND_IN_SET和group_concat(字段)

  • FIND_IN_SET(str,strlist) :

作用:查询出子串str,是否在由逗号分隔的目标字符串strlist中存在。

如:判断5是否在字符串1,2,3,4,5中存在:FIND_IN_SET(5,‘1,2,3,4,5’) ,存在则返回所在目标字符串strlist的所在位置,不存在则返回0。

执行函数mysql函数: select 函数名();

  • group_concat(字段)

作用:主要根据某个字段进行分组,把相同字段的值连接在一起。

默认连接符号是逗号 ,如果用|连接则:

group_concat(字段名 SEPARATOR “|”)

例:如下是表tp_article表中的一些数据

根据cat_id字段进行分组,把具有相同cat_id的title字段值连接在一起。

查询出当前角色所拥有的全部权限拼接在一起:

完成角色编辑功能(给角色分配权限)

步骤1:修改role/index.html的链接地址

步骤2:在admin-RoleController-upd的方法中完成数据的回显到模板中

注意: 模块-控制器-方法

步骤3:复制添加角色的add.html模板即可,改名为html.进行回显数据和把角色已有的权限默认选中

已有权限默认选中:

效果:

(6)【作业】完成角色删除功能

自行完成

(7)添加用户分配权限

步骤1:修改admin-view-user-add.html模板内容,加一个显示角色的下拉框

实现不同用户登录展示不同后台菜单

思路

  1. 用户登录成功的时候,获取到role_id。
  2. 通过role_id获取角色表的auth_id_list字段
  3. 通过权限表auth_id 只要在auth_id_list字段存在即可,查出所拥有的权限

超级管理员auth_id_list字段的值为*,代表拥有后台操作的所有权限。

代码实现

步骤1:在用户登录成功的模型的checkUser方法中,通过角色id把当前角色所有的权限写入到session。

步骤2:定义user模型中定义writeAuthToSession方法把权限写入到session中

注:后台left.html模板文件中,只需要显示一级和二级的权限即可:

我们需要构造出一个特定数据结构的数据:

如下:通过每个顶级(pid=0)的元素加个一个sonsAuth下标存储其对应的子级权限

[

auth_name=>‘用户管理’

auth_id =>46

pid => 0

……

sonsAuth=>[

[auth_name=>用户列表,’pid’=>46]

[auth_name=>用户添加,’pid’=>46]

…..

]

]

超级管理员:

非超级管理员:

步骤3:在left.html取出session中的权限,遍历访问的菜单

效果:

权限防翻墙

如下:

解决办法:在common控制器中的_initialize的方法中,做防翻墙的操作。

1、要先获取到用户所访问的控制器名和方法名,在去做相关判断是否有权限

  1. 把用户可以访问的权限存储在session中

超级管理员:

非超级管理员:

今天重点:

  1. 一张牛逼的图
  2. 怎么构造满足我们要求的数组结构数据

四、商品有关的基本概念

这里主要涉及到以下几个概念:

  • 商品类型:不同的网站的卖的商品是不一样的,比如化妆品网站专门卖化妆品、手机网站专门卖手机、汽车网站专门卖汽车。
  • 商品属性:不同的商品类型对应的商品属性也是不一样的。

比如卖汽车网站,商品(汽车)属性有轴距、变速箱、驱动方式、进气方式、排量等

比如卖电脑网站,商品(电脑)属性有尺寸、内存、cpu、操作系统、系统核数等

比如卖手机网站,商品(手机)属性有尺寸、内存、系统、颜色、网络类型、电池容量等

商品类型决定了商品属性

  • 商品分类

一个电商网站卖的商品不一样,其商品分类也是不一样的。

比如:卖汽车分类有:国产(吉利、 广汽)、日产(本田、丰田)、德国(奔驰、宝马)、韩国(起亚、现代)。

比如:卖手机分类有: 小米、华为、三星、苹果、oppo、vivo、魅族。

  • 商品(产品+属性=商品)

如:iphoneX+64G , iphoneX+256G

商品类型

不同的商品类型会有不同的属性

可以在ecshop后台中新建一个商品类型,如下:建立一个汽车商品类型

属性分组:有些属性是可以归为一组的,参考京东电脑商品:

商品属性

给商品类型添加商品属性: 商品类型–>属性列表:

给汽车类型商品添加进气方式的属性:

单选属性: 指买商品的时候,可以选择一个属性,不同的属性价格不一样

唯一属性:只能看不能选。

复选属性:可以选择多个,一般买商品的附加配件都是复选的。

当在后台添加一个商品的时候要选择一个商品类型,选择了一个商品类型就决定了这个商品的有哪些属性,如下是添加商品设置其商品属性:

添加属性的特点:

唯一属性(只能看,不能选):前面没有【+】,不可以设置价格

单选属性(可选择):前面有【+】,点击+即可复制多个,不同的单选属性可设置不同的价格

属性值手工输入:对应的是个input框,需要自己输入。

属性值是列表选择: 对应的是个select下拉框,需选中一个属性值。

商品分类

一般一个网站决定卖什么类型商品就决定了其商品分类。

如卖汽车网站:分类有国产、日系、德系、韩系等

如卖化妆品网站:分类洗面奶、乳液、面膜、保湿、祛痘、眼霜等

五、完成商品类型的curd

商品类型介绍

商品类型:不同的网站的卖的商品类型是不一样的,比如化妆品网站专卖化妆品、手机网站专卖手机、二手汽车网站专买二手汽车。

网站决定卖什么商品类型,也就决定了商品的商品属性

商品类型的增加

商品类型的列表

商品类型的编辑

【作业】商品类型的删除

六、完成商品属性的curd

1、商品属性的认识

网站决定卖什么商品类型,也就决定了商品的商品属性

可以参考ecshop添加属性的方式:

属性这里重点两种属性:唯一属性和单选属性

唯一属性:只能看,不能选。

单选属性:我们购买商品的时候,可以选择的,后面添加商品的时候,不同的单选属性价格也是不一样的,如iphone6银色和iphone黑色价格是不一样的。

②属性的值的录入方式

手工输入:不可以输入属性值,且可选值列表是禁用状态,只能在添加商品的时候输入属性值。

列表选择:在可选择列表输入一些我们指定的属性值,添加商品的时候,从中选中一个属性值即可。

表结构:

完成商品属性的添加

完成商品属性的列表

完成商品属性的编辑

完成商品属性的删除

完成商品类型列表中属性的查看

七、完成商品分类的curd

1、分析分类表结构

表字段结构如下:

完成商品分类的添加

完成商品分类的列表

4、完成商品分类的编辑

5、【作业】完成商品分类的删除

标签: RBAC不同用户显示不同后台权限增删改查权限防翻墙角色增删改查
上一篇文章

TP5 商城(三)账户状态权限控制、商品类型 CURD、商品属性 CURD、商品分类 CURD

下一篇文章

TP5 商城(一)环境部署、数据表、后台首页、用户 CURD、Ajax 状态切换、后台登录、后台退出、后台防翻墙、RBAC

下一篇文章
TP5 商城(一)环境部署、数据表、后台首页、用户 CURD、Ajax 状态切换、后台登录、后台退出、后台防翻墙、RBAC

TP5 商城(一)环境部署、数据表、后台首页、用户 CURD、Ajax 状态切换、后台登录、后台退出、后台防翻墙、RBAC

发表回复 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Search

没有结果
查看所有结果

About Me

个人随笔

Winston Lee

Programmer

Hello & welcome to my blog! My name is Winston Lee and am a programmer and am keen on sharing.

Winston Lee

About Me

Hello & welcome to my blog! My name is Winston Lee and am a programmer and am keen on sharing.

Categories

  • AJAX
  • BootStrap
  • CodeIgniter
  • CSS
  • DedeCMS
  • GIT
  • HTML
  • Javascript
  • Jquery
  • Laravel
  • Laravel在线教育平台
  • Linux
  • Memcache
  • MongoDB
  • MVC
  • Mysql
  • Nginx
  • Node
  • PDO
  • PHP
  • PHP7
  • PHP基本语法
  • PHP核心编程
  • Redis
  • Smarty
  • Socket
  • SVN
  • Swoole
  • TP3.2
  • TP3.2商城
  • TP5.0
  • TP5.0商城
  • XML
  • Yaf
  • Yii
  • Yii手机直播
  • 二次开发
  • 优化方案
  • 前端技术
  • 前端框架
  • 后台框架
  • 基本操作
  • 微信公众号
  • 数据库
  • 未分类
  • 混合APP
  • 源码Blog项目
  • 版本控制
  • 环境搭建
  • 移动端开发
  • 网站优化
  • 资料
  • 面向对象
  • 面向对象编程
  • 页面静态化

Tags

DOM Json RBAC 事件 传参 函数 分页 判断语句 匿名函数 变量 图片上传 存储过程 安装 对象 封装 属性 接口 控制器 数据库操作 数据类型 数据表 数组 文件上传 无刷新分页 权限 标签 模型 正则 流程控制 目录结构 算法 类 索引 继承 缩略图 表关系 视图 路由 运算符 选择器 递归 配置 错误处理 页面静态化 验证码
  • 首页
  • 前端
  • 前端框架
  • PHP
  • 数据库
  • 优化
  • 后台框架与实战
  • 移动开发
  • 二次开发
  • Linux
  • 版本控制
  • Node.js
  • 资料库

沪公网安备31011502400873 | 沪ICP备2024050435号-3

没有结果
查看所有结果
  • 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库

沪公网安备31011502400873 | 沪ICP备2024050435号-3