yotaku的开发日志(一)
yotaku的开发日志(1)
2015-12-18 21:17:46
连续看了几天的ThinkPHP框架,目前看到基于角色的用户访问权限控制。
相关代码如下:
数据库
用户表(管理员)
mg_id | mg_name | mg_pwd | mg_time | mg_role_id |
---|---|---|---|---|
0 | creatint | 123 | 2587413547 | 1 |
1 | yotaku | 123 | 258744984 | 4 |
CREAATE TABLE `sw_manager` ( `mg_id` int(11) NOT NULL AUTO_INCREMENT, `mg_name` varchar(32) NOT NULL, `mg_pwd` varchar(32) NOT NULL, `mg_time` int(10) unsigned NOT NULL COMMENT '时间', `mg_role_id` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '角色id', PRIMARY KEY (`mg_id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
权限表
auth_id(权限ID) | auth_name(权限名称) | auth_pid(父id) | auth_c(控制器) | auth_a(操作方法) | auth_path(全路径) | auth_level(权限级别) |
---|---|---|---|---|---|---|
100 | 产品中心 | 0 | '' | '' | 100 | 0 |
101 | 产品展示 | 100 | ManagerController | show | 100-101 | 1 |
CREATE TABLE `sw_auth` ( `auth_id` smallint(6) unsigned NOT NULL AUTO_INCREMENT, `auth_name` varchar(20) NOT NULL COMMENT '权限名称', `auth_pid` smallint(6) unsigned NOT NULL COMMENT'父id', `auth_c` varchar(32) NOT NULL DEFAULT '' COMMENT '控制器', `auth_a` varchar(32) NOT NULL DEFAULT '' COMMENT '操作方法', `auth_path` varchar(32) NOT NULL COMMENT '全路径', `auth_level` tinyint(4) NOT NULL DEFAULT '0' COMMENT '级别', PRIMARY KEY(`auth_id`)) ENGING-InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
角色表
role_id | role_name | role_auth_ids | role_auth_ac |
---|---|---|---|
0 | 站主 | 1,3,9 | 操作器-控制器,操作器-控制器,... |
1 | 高级管理员 | 1,2,3,9,12 | 操作器-控制器,操作器-控制器,... |
CREATE TABLE `sw_role` ( `role_id` smallint(6) unsigned NOT NULL AUTO_INCREMENT, `role_name` varchar(20) NOT NULL COMMENT '角色名称', `role_auth_ids` varchar(128) NOT NULL DEFAULT '' COMMENT '权限id,1,3,..', `role_auth_ac` text COMMENT '控制器2-操作3,控制器1-操作6,...', PRIMARY KEY(`role_id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;<br><br>
数据模拟:
1.权限数据
产品中心(产品展示,最新产品,分类管理,子类管理) 高级管理(用户留言,留言簿,产品订购,文件管理) 系统管理(基本设置,样式管理,首页设置,管理员列表)
<span class="zhushi">顶级权限</span>insert into sw_auth values ( 100,'产品中心',0,'','',100,0 );insert into sw_auth values ( 101,'高级管理',0,'','',101,0 );insert into sw_auth values ( 102,'系统管理',0,'','',102,0 );insert into sw_auth values ( 103,'权限管理',0,'','',103,0 );<span class="zhushi">次级权限</span>insert into sw_auth values ( 104,'产品展示',100,'Goods','show','100-104',1 );insert into sw_auth values ( 105,'最新产品',100,'Goods','showlist','100-105',1 );insert into sw_auth values ( 106,'分类管理',100,'Goods','cate','100-106',1 );insert into sw_auth values ( 107,'用户留言',101,'Goods','words','101-107',1 );insert into sw_auth values ( 108,'留言簿', 101,'Goods','wordsbook','101-108',1 );insert into sw_auth values ( 109,'基本设置',102,'Goods','set','102-109',1 );insert into sw_auth values ( 110,'样式管理',102,'Goods','css','102-110',1 );insert into sw_auth values ( 111,'用户列表',103,'Goods','userlist','103-111',1 );insert into sw_auth values ( 112,'角色管理',103,'Goods','role','103-112',1 );insert into sw_auth values ( 113,'权限列表',103,'Goods','auth','103-113',1 );
2.角色数据
sw_role 站主 所有权限(103,104,105,106,107,108,109) 管理员 部分权限(104,105,109) 版主 部分权限(103,108)
<span class="zhushi">角色</span>insert into sw_role values (10,'站主','100,101,102,103,104,105,106,107,108,109,110,111,112,113','Goods-show,Goods-showlist,Goods-cate,Goods-words,Goods-wordsbook,Goods-set,Goods-css');insert into sw_role values (11,'管理员','100,102,104,105,109','Goods-showlist,Goods-cate,Goods-css');insert into sw_role values (12,'版主','100,101,103,106,108,113','Goods-show,Goods-set');
3.流程说明
Index控制器内 获取用户的角色id,进而获得角色权限 进行判断是否展现数据 Index控制器--->left方法--->left.html模板 Index控制器
$mg_id = session('admin_id');
$manager_info = D('Manager')->find($mg_id); $role_id = $manager_info['mg_role_id'];
$role_info = D('Role')->find($role_id); $auth_ids = $role_info['role_auth_ids'];
$auth_infoA = D('Auth')->where("auth_level=0 and auth_id in($auth_ids)")->select();
$auth_infoB = D('Auth')->where("auth_level=1 and auth_id in($auth_ids)")->select();
$this->assign('auth_infoA',$auth_infoA); $this->assign('auth_infoB',$auth_infoB);
$this->assign('auth_info',$auth_info); $this->display();
4.模板 left.html
{foreach $auth_infoA as $k=>$v}
background={$smarty.const.ADMIN_IMG_URL}/menu_bt.jpg >{$v.auth_id}) href="javascript:void(0);">{$v.auth_name}
{foreach $auth_infoB as $k2=>$v2} {if $v2.auth_pid == $v.auth_id} {/if} {/foreach}
{$v.auth_id} style="display: none" cellspacing=0 cellpadding=0 width=150 border=0>
{$smarty.const.ADMIN_IMG_URL}/menu_icon.gif" width=9>
{$smarty.const.__MODULE__}/{$v2.auth_c}/{$v2.auth_a}" target=right>{$v2.auth_name}
{/foreach}

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

insertignore、insert和replace的区别指令已存在不存在举例insert报错插入insertintonames(name,age)values(“小明”,23);insertignore忽略插入insertignoreintonames(name,age)values(“小明”,24);replace替换插入replaceintonames(name,age)values(“小明”,25);表要求:有PrimaryKey,或者unique索引结果:表id都会自增测试代码创建表

在现代软件开发中,身份认证是一项非常重要的安全措施。Auth0是一家提供身份认证服务的公司,它可以帮助开发者快速实现多种身份认证方式(包括OAuth2、OpenIDConnect等),并提供安全可靠的认证服务。在本文中,我们将介绍如何在JavaAPI开发中使用Auth0进行身份认证。第一步:创建Auth0账号并注册应用首先,我们需要在

使用java的StringBuilder.insert()函数在指定位置插入字符串StringBuilder是Java中用于处理可变字符串的类,它提供了多种方法来操作字符串,其中insert()函数是用于在指定位置插入字符串的常用方法之一。在本文中,我们将介绍如何使用insert()函数来实现在指定位置插入字符串的功能,并给出相应的代码示例。insert()

在当今的Web开发时代,有效且高效的表管理变得非常重要,特别是在处理数据量大的Web应用程序时。从表中动态添加、编辑和删除行的能力可以显着增强用户体验并使应用程序更具交互性。实现这一目标的一种有效方法是利用jQuery的强大功能。jQuery提供了许多功能来帮助开发人员执行操作。表格行表格行是相互关联的数据的集合,由HTML中的元素表示。它用于将表格中的单元格(由元素表示)分组在一起。每个元素用于定义表中的一行,对于多属性表,通常包含一个或多个元素。语法$(selector).append(co

引言Supabase是一个自称的"开源Firebase替代品"。我对与Supbase合作已经有一段时间了,我想我将尝试使用他们的认证API来为Vue.js3应用程序进行认证设置。首先,你为什么要使用SupabaseAuth?最重要的是,如果你使用Supabase作为你的数据存储,(它有一些非常甜蜜的好处),SupabaseAuth是你可以管理对这些数据的访问的唯一方法。其次,虽然SupabaseAuth也有许多不同的功能。没有中间件的用户权限(通过Postgres的行级安全)

使用Auth0实现PHP安全验证引言:在现代的Web开发中,安全验证是至关重要的一部分。为了保护用户的隐私和数据安全,我们需要采取措施确保只有授权用户才能访问敏感信息或执行特定操作。Auth0是一个流行的身份验证和授权平台,它提供了简单且强大的解决方案来帮助我们实现安全验证。本文将介绍如何使用Auth0实现PHP的安全验证,并提供代码

insert语句的基本语法“INSERT INTO 表名 (列 1, 列 2, 列 3, ...),VALUES (值 1, 值 2, 值 3, ...);”,“表名”是要插入数据的表的名称,“列 1”、“列 2”、“列 3”等是表中要插入数据的列的名称,“值 1”、“值 2”、“值 3”等是要插入的数据值。

Java中使用StringBuilder类的insert()方法将字符串插入到指定位置在Java中,如果需要对已有的字符串进行插入操作,可以使用StringBuilder类的insert()方法。StringBuilder是可变的字符序列,它提供了一系列的方法来对字符串进行修改和操作。使用insert()方法,可以在指定位置将字符串插入到原有的字符串中,从而
