典型的权限管理,简单介绍如下: 
用户表:u_id,username 
权限表:a_id,name(功能菜单名称),url(菜单功能对应的链接地址) 
角色表:r_id,name 
用户权限关系表:u_id,a_id 
角色权限关系表:r_id,a_id 
用户角色关系表:u_id,r_id 通过以上表设计可根据不同的用户直接分配权限关系,或分配角色间接分配权限! 
页面显示菜单可直接通过用户跟权限的直接或间接关系从数据库读取权限表信息显示!
这个是我在问一个问题的时候,有人回答的,可是我不明白,表于表之间该建立怎么样的连接,
他们之间都有什么关系,,他们之间是怎么联系起来的,我又应该怎样去使用这个表那?
如果有人知道,希望能给我个详细的解答谢谢了,最好能看代码解说,呵呵,人比较笨。大家多担待了,谢谢了~~~

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【yzg000123】截止到2008-07-08 15:49:08的历史汇总数据(不包括此帖):
    发帖的总数量:25                       发帖的总分数:700                      每贴平均分数:28                       
    回帖的总数量:45                       得分贴总数量:5                        回帖的得分率:11%                      
    结贴的总数量:24                       结贴的总分数:600                      
    无满意结贴数:7                        无满意结贴分:180                      
    未结的帖子数:1                        未结的总分数:100                      
    结贴的百分比:96.00 %               结分的百分比:85.71 %                  
    无满意结贴率:29.17 %               无满意结分率:30.00 %                  
    值得尊敬
      

  2.   

    用户表与角色表之间建立一张中间表。
    角色表与权限表之间建立一张中间表。
    用户表与权限表之间建立一张中间表。
    通过这三张中间表实现各个表之间的多对多关系,中间表只有一个主键加上两张关联表的外键,当然你也可以用两个外键一起建立联合主键。其实如果你用hibernate并不需要关心这些问题,在配置文件中配置好对应关系,hibernate会自动生成表以及对应关系。
      

  3.   

    用户权限关系表:u_id,a_id 。对这个表我认为可以不要,也就是说不单独对人直接分配操作。--------对角色分配操作(也就是菜单),然后将人员分配角色登录后,取得根据人所拥有的角色,然后取得这些角色拥有那些操作
      

  4.   

    我想知道切实可行的SQL语句。
    比如我想通过输入一个账号来查询这个账号可用的菜单,
    在这些关系表都建立好的情况下
    我是怎样通过SQL语句去查询的那?
      

  5.   

    1.通过用户,权限取
    select 权限表.name,权限表.url from 用户表,权限表,用户权限关系表 where
    权限表.a_id=用户权限关系表.a_id and 
    用户表.u_id=用户权限关系表.u_id and
    用户表.username='testuser';
    2.通过用户,角色取
    select 权限表.name,权限表.url from 用户表,权限表,用户角色关系表,角色权限关系表 where
    权限表.a_id=角色权限关系表.a_id and 
    用户表.u_id=用户角色关系表.u_id and
    用户表.username='testuser';
      

  6.   

    权限表就是一个功能表,系统提示那些功能用户表:有多少账号可以登入系统.角色表:就是权限表的模板. (例如系统有Administrator,guest,user)用户表里的用户是属于哪种类型 (张三=administrator? or ....)关系就是他们的连系.
      

  7.   

    角色表:r_id,name 
    角色权限关系表:r_id,a_id
    用户角色关系表:u_id,r_id 
    这3个表完全多余,必须删掉,否则只会增加程序复杂性。只保留下面3个表,非常清晰和简单:
    用户表:u_id,username 
    权限表:a_id,name(功能菜单名称),url(菜单功能对应的链接地址) 
    用户权限关系表:u_id,a_id 在每个链接地址jsp页面,都加上判断用户是否有权限,没权限就转向到警告页面。
    用taglib最好,或者用struts可以直接在action里判断也可以。
      

  8.   

    我上天刚做了,其实很简单的,看你的表关系我感觉很乱
    我的是这样设计的,如果有什么问题QQ我,464344269,这个项目已经运行,是没有问题的用户表:username,role
    for:   admin   ,admin
    角色表:role    ,rolelist
    for:   admin   ,功能菜单1,功能菜单2,。3,....登陆的时候 捕获 用户名 ,username-->推出--->role,放到session里在 左边栏left.jsp里,获取session的role
    根据角色表 role 推出--->rolelist
    就可以实现权限了
    给出left.jsp<%@page language="java" contentType="text/html;charset=gb2312" import="com.suypower.djbxt.sysmanger.*,java.sql.*" %>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>left</title>
    <!--tree  开始--><LINK 
    href="Tree.files/dtree.css" type=text/css 
    rel=StyleSheet>
    <script src="js/show.js"></script>
    <SCRIPT src="Tree.files/dtree.js" type=text/javascript></SCRIPT><META content="MSHTML 6.00.2900.3132" name=GENERATOR>
    <!--tree  结束-->
    <style type="text/css">
    <!--
    body {
    margin-left: 0px;
    margin-top: 0px;
    margin-right: 0px;
    margin-bottom: 0px;
    background-color: #FFFFFF;
    }
    .style2 {color: #15427F}
    td {
    font-size: 12px;
    line-height: 150%;
    color: #333333;
    text-decoration: none;
    }
    .style3 {color: #FF0000}
    a {
    font-size: 12px;
    line-height: 150%;
    color: #052B77;
    text-decoration: none;
    }
    .style4 {color: #999999}
    .style6 {font-size: 13px}
    .a4 { font-size: 12px;
    line-height: 120%;
    color: #555555;
    text-decoration: none;
    }
    .a6 { font-size: 12px;
    line-height: 120%;
    color: #0000FF;
    text-decoration: none;
    }
    .input3 {
    BACKGROUND: #ffffff; BORDER-BOTTOM: #B3CCE8 1px solid; BORDER-LEFT: #B3CCE8 1px solid; BORDER-RIGHT: #B3CCE8 1px solid; BORDER-TOP: #B3CCE8 1px solid; COLOR: #1667BC; FONT-FAMILY: "arial"; FONT-SIZE: 12px
    ; height: 16px; width: 90px}.input4 {
    BACKGROUND: #2171C5; BORDER-BOTTOM: #f4f4f4 1px solid; BORDER-LEFT: #f4f4f4 1px solid; BORDER-RIGHT: #f4f4f4 1px solid; BORDER-TOP: #f4f4f4 1px solid; COLOR: #ffffff; FONT-FAMILY: "arial"; FONT-SIZE: 12px
    ; height: 20px; width: 60px}
    -->
    </style><script language="JavaScript" type="text/JavaScript"><!--
    function MM_preloadImages() { //v3.0
      var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
        var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
        if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
    }//-->
    </script>
    </head>
    <body>
    <%
    String role_czxs="";
    if(session.getAttribute("role_czxs") !=null)
    {
     role_czxs =session.getAttribute("role_czxs").toString();
    }
    System.out.println(role_czxs);
    DBconnect db=null; 
        Connection con=null;
        Statement stmt=null;
        ResultSet rs=null;
        String purview="";
        //int width=0;
      //  int height=0;
        try
        {
         db = new DBconnect();
           con = db.getConection();
           stmt = con.createStatement();
          String sql = "SELECT rolelist FROM tb_czxs_role WHERE role='"+role_czxs+"'";
          System.out.println(sql);
          rs=stmt.executeQuery(sql);      if(rs.next())
          {
           purview=rs.getString("rolelist");
          }
        }
        catch(Exception ex)
        {
        }
        finally {
          try {        if(con!=null)
            {
              con.close();
            }
          }catch (Exception e) {
            e.printStackTrace();
          }
          System.out.println("可看到的模块:"+purview);
    }
    %>
    <table width="100%"  border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="194" valign="top" bgcolor="#FEFFED">
         <table width="100%"  border="0" cellspacing="0" cellpadding="0">
             <tr>
              <td height="3"></td>
            </tr>
           </table>
            <table width="100%"  border="0" cellspacing="0" cellpadding="0">
              <tr>
                <td width="194"><img src="images/biao01b.gif" width="194" height="40"></td>
              </tr>
              <tr>
                <td><img src="images/biao02a.gif" width="194" height="37"></td>
              </tr>
              <tr>
                <td align="center">
                 <A href="javascript:%20d.openAll();">全部展开</A> | 
                 <A href="javascript:%20d.closeAll();">全部折叠</A>
                </td>
              </tr>
              <tr>
                 <td id="div1" >
                  <div id="divtree" class="dtree" style="OVERFLOW-x:auto;OVERFLOW-y:auto;WIDTH:194px;height:100%">
                   <table width="100%"  border="0" cellpadding="0" cellspacing="0" bgcolor="#dfdfdf">
                    <tr>
                      <td bgcolor="#FEFFED">
                       <table width="100%" border="0" cellpadding="0" cellspacing="0">
                          <tr>
                            <td valign="top" id="divheight">
                              <SCRIPT type=text/javascript>
    <!--
                 
    d = new dTree('d');

    d.add(0,-1,'承装(修、试)电力设施许可证');

    <%
    if(purview.indexOf("企业管理") != -1){
    %>
    d.add(1,0,'企业管理');
    <% } %>

    <%
    if(purview.indexOf("企业信息") != -1){
    %>
    d.add(2,1,'企业信息','enterpriseInfo.jsp','','mainFrame');
    <% } %>

    <%
    if(purview.indexOf("人员信息") != -1){
    %>
    d.add(3,1,'人员信息','technicianInfo.jsp','','mainFrame');
    <% } %>

    <%
    if(purview.indexOf("许可业务审查") != -1){
    %>
    d.add(4,0,'许可业务审查');
    <% } %>

    <%
    if(purview.indexOf("形式审查") != -1){
    %>
    d.add(5,4,'形式审查','xingshiCheck.jsp','','mainFrame');
    <% } %>

    <%
    if(purview.indexOf("实质性审查") != -1){
    %>
    d.add(6,4,'实质性审查','ShiZhiServlet','','mainFrame');
    <% } %>

    <%
    if(purview.indexOf("复核") != -1){
    %>
    d.add(7,4,'复核','chuzhangCheck.jsp','','mainFrame');
    <% } %>

    <%
    if(purview.indexOf("补正状况") != -1){
    %>
    d.add(8,4,'补正状况','buzhengOpinion.jsp','','mainFrame');
    <% } %>

    <%
    if(purview.indexOf("现场核查") != -1){
    %>
    d.add(9,4,'现场核查','xianchangCheck.jsp','','mainFrame');
    <% } %>

    <%
    if(purview.indexOf("审查会议意见") != -1){
    %>
    d.add(10,4,'审查会议意见','conferenceOpinion.jsp','','mainFrame');
    <% } %>

    <%
    if(purview.indexOf("许可决定") != -1){
    %>
    d.add(11,4,'许可决定','licenceDecision.jsp','','mainFrame');
    <% } %>

    <%
    if(purview.indexOf("许可证录入") != -1){
    %>
    d.add(12,4,'许可证录入','addLicenceNo.jsp','','mainFrame');
    <% } %>

    <%
    if(purview.indexOf("系统管理") != -1){
    %>
    d.add(13,0,'系统管理');
    <% } %>

    <%
    if(purview.indexOf("注册信息") != -1){
    %>
         d.add(14,13,'注册信息','qiantaiLogin.jsp','信息确认','mainFrame');
         <% } %>
        
         <%
    if(purview.indexOf("年度自检") != -1){
    %>
            d.add(15,13,'年度自检','ndzj.jsp','','mainFrame');
            <% } %>

    document.write(d);


     var h = screen.height - 400;
             var h1 = h - 24;

    div1.style.height = h+"px";
            divheight.style.height = h1+"px";
    //-->
    </SCRIPT>
       </td>
      </tr>
    </table>

    </td>         
            </tr>
          </table>
            </div>
        </td>
      </tr>
    </table>
    <table width="100%"  border="0" cellspacing="0" cellpadding="0">
                <tr>
                  <td><img src="images/bg03b.gif" width="194" height="16"></td>
                </tr>
        </table>
    </td>
      </tr>
    </table></body>
    </html>
      

  9.   


    这是我的偶像,最终给我解决问题了。关注的人挺多我就把相关的表和SQL语句写下来,供以后的人和关注这个问题的人用吧~相关表:
    用户表:字段有 (u_id,u_name)
    菜单权限表: (m_id,m_name[菜单名称],m_url【菜单连接地址】)
    角色表:(r_id,r_name)
    相关关系表有
    u_r_table 用户权限表(u_id,r_id)
    r_m_table 角色权限表(r_id,m_id)SQL语句是:select m.m_name,m.m_url from usertable u,menutable m,r_m_table rm,u_r_table ur,roletable r
    where rm.m_id =m.m_id and u.u_id=ur.u_id and r.r_id=rm.r_id and ur.r_id = r.r_id and u.u_id='1000000010001100'希望这些东西能给关注这个问题的朋友们一个好的解决方案。