陈广安个人网站
会写代码的咸鱼
陈广安个人网站阿里云盘资源
陈广安个人网站网盘资源搜索
“ 梦想还是要有的,万一实现了呢!”
— 马云

TP5框架做RBAC权限控制模块,图文教程

创建时间:2017-04-05

本案例采用四张表

1、tb_admin  用户表

用户表


2、tb_rbac_role 角色表

角色表


3、tb_rbac_node 节点表

节点表


4、tb_role_node 角色 节点关联表

角色节点关联表


创建四张表的sql语句

-- phpMyAdmin SQL Dump
-- version 4.6.4
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Generation Time: 2017-04-05 02:04:30
-- 服务器版本: 5.7.14
-- PHP Version: 5.6.25

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `h15016287206`
--

-- --------------------------------------------------------

--
-- 表的结构 `tb_admin`
--

CREATE TABLE `tb_admin` (
  `id` int(11) NOT NULL COMMENT '自增ID',
  `uniquen_id` varchar(32) NOT NULL COMMENT '用户唯一性ID',
  `name` char(10) NOT NULL DEFAULT '' COMMENT '昵称',
  `user` varchar(50) NOT NULL COMMENT '账号',
  `pw` char(32) NOT NULL DEFAULT '' COMMENT '密码',
  `ip` char(15) NOT NULL DEFAULT '' COMMENT 'ip地址',
  `ip_addr` varchar(255) NOT NULL COMMENT 'IP地理位置',
  `create_time` datetime NOT NULL DEFAULT '2017-02-24 14:33:19' COMMENT '添加时间',
  `up_time` timestamp NOT NULL DEFAULT '2017-02-24 06:34:37' ON UPDATE CURRENT_TIMESTAMP COMMENT '最后登录一次时间',
  `disable` enum('2','1') NOT NULL DEFAULT '1' COMMENT '禁用管理员',
  `role_id` tinyint(4) NOT NULL DEFAULT '3' COMMENT '角色组ID',
  `beizhu` text COMMENT '备注'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- 表的结构 `tb_rbac_node`
--

CREATE TABLE `tb_rbac_node` (
  `id` tinyint(4) NOT NULL COMMENT '自增ID',
  `name_en` varchar(255) NOT NULL COMMENT '应用名称',
  `name_cn` varchar(255) NOT NULL COMMENT '应用中文名称',
  `type` enum('2','1','0') NOT NULL DEFAULT '0' COMMENT '类型,区分是模块 还是应用 还是方法',
  `pid` tinyint(4) NOT NULL COMMENT '构建无限极分类',
  `create_time` datetime NOT NULL DEFAULT '2017-04-02 17:49:03' COMMENT '创建时间',
  `up_time` timestamp NOT NULL DEFAULT '2017-04-02 09:49:26' ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- 表的结构 `tb_rbac_role`
--

CREATE TABLE `tb_rbac_role` (
  `id` tinyint(4) NOT NULL COMMENT '自增ID',
  `role_name` varchar(255) NOT NULL DEFAULT '' COMMENT '角色名称',
  `beizhu` varchar(255) NOT NULL COMMENT '备注信息',
  `create_time` datetime NOT NULL DEFAULT '2017-04-02 11:12:18' COMMENT '创建时间',
  `up_time` timestamp NOT NULL DEFAULT '2017-04-02 03:12:44' ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `disable` enum('0','1') NOT NULL DEFAULT '1' COMMENT '1正常是引用,0 禁用'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- 表的结构 `tb_role_node`
--

CREATE TABLE `tb_role_node` (
  `id` int(11) NOT NULL,
  `role_id` tinyint(4) NOT NULL COMMENT '角色ID',
  `node_id` tinyint(4) NOT NULL COMMENT '节点ID'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Indexes for dumped tables
--

--
-- Indexes for table `tb_admin`
--
ALTER TABLE `tb_admin`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `name` (`name`);

--
-- Indexes for table `tb_rbac_node`
--
ALTER TABLE `tb_rbac_node`
  ADD PRIMARY KEY (`id`);

--
-- Indexes for table `tb_rbac_role`
--
ALTER TABLE `tb_rbac_role`
  ADD PRIMARY KEY (`id`);

--
-- Indexes for table `tb_role_node`
--
ALTER TABLE `tb_role_node`
  ADD PRIMARY KEY (`id`);

--
-- 在导出的表使用AUTO_INCREMENT
--

--
-- 使用表AUTO_INCREMENT `tb_admin`
--
ALTER TABLE `tb_admin`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', AUTO_INCREMENT=107;
--
-- 使用表AUTO_INCREMENT `tb_rbac_node`
--
ALTER TABLE `tb_rbac_node`
  MODIFY `id` tinyint(4) NOT NULL AUTO_INCREMENT COMMENT '自增ID', AUTO_INCREMENT=38;
--
-- 使用表AUTO_INCREMENT `tb_rbac_role`
--
ALTER TABLE `tb_rbac_role`
  MODIFY `id` tinyint(4) NOT NULL AUTO_INCREMENT COMMENT '自增ID', AUTO_INCREMENT=5;
--
-- 使用表AUTO_INCREMENT `tb_role_node`
--
ALTER TABLE `tb_role_node`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=158;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;


需要用到的HTML页面


添加角色页面

添加角色


添加管理员,用户页面

添加管理员页面


添加节点页面

添加节点


查看角色页面

角色列表


查看节点页面

节点列表



分配权限页面

权限分配页面



管理员入库

管理员入库



添加角色入库

添加角色sql



添加节点入库

节点入库


分配权限页面

分配权限方法


模板中遍历节点,将该角色已有的节点 打上勾,当点击确认分配权限的时候,获取已勾中的checkbox的value值,然后用、拼接成一个字符串,ajax提交给后台

遍历节点 我认为的权限之中的难点之一 六层foreach嵌套 吐血

上图~

1

2

3

4


权限分配 方法逻辑

入库逻辑

入库逻辑2


分配权限 数据库操作

QQ图片20170405103129


检测权限,建立一个common控制器,然后所有需要权限控制的控制来继承这个common控制器

555