在昨天的文章里已经介绍了第一张表,这个表存储的是用户信息,其中有一个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的是系统管理员



Logo

快速构建 Web 应用程序

更多推荐