在昨天的文章里已经介绍了第一张表,这个表存储的是用户信息,其中有一个role字段我没有强制性的弄成外键,它引用的是m_role表的id,下面就来介绍这个角色表
下面是表设计的截图
1.角色表
这个表也比较简单我就不说了
2.菜单表,这个表用来存储菜单信息包括对应的二级菜单,URL;其中一级菜单的parentmenu为-1,如果是其他值则表示子菜单此时parentmenu的值就是菜单表的主键
先来看表结构
下面是表数据
解释一下,这个表的意思是菜单管理下面有添加一级菜单和一级菜单管理,因为这2项的parentmenu为18,而18对应的是菜单管理,其他的以此类推。
3.下面是角色权限表,这其实是一个m_menu和m_role的中间表
下面是这个表对应的外键
到这里表的设计就结束了,形象思维好的程序员现在应该知道这几个表的逻辑关系了。后面的程序开发就围绕着几个表来展开
4.管理系统后台首页
首页其实用的就是一个frameset和一堆嵌套的frame,可以说好多经典的后台管理系统都是这个样子,上面是主菜单,下半部分有分左右两边,下半部分的左边是二级菜单也可以是树形菜单,右边就是内容页面,这个部分可以做增删改查一系列操作。给大家拉一个图看看
我的系统差不多也是这个样子,因为保密需要不方便在博客里面截图,后期我会上传我的整个项目大家可以下载了自己看
5.一级菜单的显示
显示一级菜单应根据用户的角色来显示,例如系统管理员可以看到所有菜单,其他管理员就只能看到部分,这里就要把m_role,m_menu,m_roleauth三个表做连接查询了
这里先给出控制器代码
function getMenuItem(){
$smart=new Smarty();
$smart->left_delimiter="<{";
$smart->right_delimiter="}>";
//查询用户对应的菜单
$topImpl=new TopMenuManagerImpl();
$arr=$topImpl->getMenuItem();
$smart->assign("arr",$arr);
$smart->assign("realname",$_SESSION["realname"]);
$smart->display("top.tpl");
}
紧接着就是TopMenuManagerImpl里的getMenuItem了
//读取主菜单(后面需要改进)
public function getMenuItem(){
$role=$_SESSION["role"];
$db=new DBUtil();
$conn=$db->getConnection();
$base=new BaseDBOperate();
$sql="select B.* from m_roleauth A,m_menu B,m_role C where A.role=C.id and A.role=$role and A.menu=B.id";
$arr=$base->query($sql,$conn);
$db->close($conn);
return $arr;
}
下面是top.tpl模板页面
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../../css/style_m.css">
<link rel="stylesheet" type="text/css" href="../../css/style.css">
</head>
<body>
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="topBg">
<tr class="topListBg">
<td width="737" height="57"><font size="5">角色权限管理系统</font></td>
<td valign="middle"><table width="280" border="0" align="right" cellpadding="0" cellspacing="0" >
<tr class="topListBg" >
<td width="27"></td>
<td width="367"><span style="color:red;">你好,<{$realname}></span> | <a href="LoginController.php?method=logoff" class="htwhite" target="_top">退出系统</a></td>
</tr>
</table>
</td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="24" background="../../images/htnav_bg.gif">
<table border="0" align="left" cellpadding="0" cellspacing="0">
<tr>
<{foreach from=$arr item=message}>
<td height="21" valign="bottom"><a href="../../manage/main.html?parentMenu=<{$message.id}>" target="mainFrame"><{$message.name}></a></td>
<td><font color="#FFFFFF"> | </font></td>
<{/foreach}>
</tr>
</table>
</td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="1"></td>
</tr>
<tr>
<td background="../../images/htbanner_b.gif"></td>
</tr>
<tr>
<td height="1"></td>
</tr>
</table>
</body>
</html>
这一块的难度在于sql语句的编写以及菜单表和角色权限表的数据库设计。对了顺便看看角色权限表的数据role为1的是系统管理员