ASP.NET对HTML元素进行权限控制(二)

原创 2013年12月04日 17:50:24

这是这个权限控制的第一步,扫描界面把要分配权限的元素的信息获取出来存入到数据库中。

这一步分三小步:

(1).标出界面所要分配权限的元素

(2).扫描界面获取所要分配权限的元素信息。(ID,标题,层级关系)

(3).存入数据库中。

1.标出界面所要分配权限的元素.

       在扫描的时候一开始我觉得很难因为HTML元素过多又有很多层级关系。一开始用的是<div>标签来表示HTML所要分配权限的元素,发现这个方案不行,比如把添加用户按钮加上DIV那么这个按钮的样式就变了还得调样式我现在做的KS系统有将近100个界面,再加上现在的界面已经确定好样式,调好CSS,加上再加上DIV的话那么得重新调界面,就这个问题想了两三天,最后我想到要不自定义一个HTML元素标签为:<box></box>为这个标签加上ID和Title为:<box id="AddID" Title=“添加按钮”></box>,用这个标签来标记所要分配权限的元素。这样的话既不用更改样式又能获取到所要的信息。更改之后的界面后台代码为:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="Author" content="kudychen@gmail.com" />
    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
    <title>用户管理——查询用户</title> 

    <script src="../../js/DIV/jquery.js"></script>
    <script src="../../js/DIV/DIV.js"></script>
    <link href="../../css/admin.global.css" rel="stylesheet" type="text/css" />
    <link href="../../css/admin.content.css" rel="stylesheet" type="text/css" />

    <style type="text/css">
        .btn-middle {
            width: 76px;
        }
    </style>

</head>
<body>
<form id="Form" method="post" runat="server" >
    <%--box标记 main 开始标记--%>
   <box id="main" title="主要">
    <div class="location">当前位置:用户管理 -> 查询用户</div>
    
    <div class="blank10"></div>
    <%--box标记 QueryUser 开始标记--%>
    <box id="QueryUser" title="查询用户">
    <div class="search block" >
        <div class="h">
            <span class="icon-sprite icon-magnifier"></span>
            <h3>快速搜索</h3>
        </div>
        <div class="tl corner"></div>
        <div class="tr corner"></div>
        <div class="bl corner"></div>
        <div class="br corner"></div>
        <div class="cnt-wp">
            <div class="cnt">
                <div class="search-bar">
                    <label class="first txt-green">用户名:</label>
                    <input value="" type="text" name="username" id="username" class="input-small" />

                    
                       <asp:LinkButton ID="lbtQuery" class="btn-lit" runat="server" 
                            OnClick="lbtQuery_Click" Width="58px"><span >查询</span></asp:LinkButton> 
                                                          
                   <%--box标记 AddUser 开始标记--%>
                    <box id="AddUser" title="添加用户">
                        <a class="btn-lit btn-middle" href="AdmAddUser.aspx">
                            <span>添加用户</span>
                        </a>
                    </box>
                 <%--box标记 AddUser结束标记--%>
                </div>
            </div>
        </div>
     </div>
</box>  
<%--box标记 QueryUser结束标记--%>   
        
<%--box标记 UserList开始标记--%>              
<box id="UserList" title="用户列表">
    <span class="block">
        <div class="tl corner"></div>
        <div class="tr corner"></div>
        <div class="bl corner"></div>
        <div class="br corner"></div>
        <div class="cnt-wp">
            <div class="cnt">
        <div class="h">
            <span class="icon-sprite icon-list"></span>
            <h3>用户列表</h3>
        </div>
    <div class="blank10"></div>

                <asp:Repeater ID="rpUserInfo" runat="server"  onitemcommand="rpUserInfo_ItemCommand">
                <HeaderTemplate>
               <table class="data-table history" id="mainTable" border="0" cellspacing="0" cellpadding="0">
                        <tr>
                            <th scope="col">用户名称</th>
                            <th scope="col">角色</th> 
                            <th scope="col">操作记录</th>
                            <th scope="col">编辑</th>
                        </tr>    
                </HeaderTemplate>
        <ItemTemplate>        
                        <tr>
                            <td class="txt160 c"><%#Eval("UserName")%></td>
                            <td class="txt c"><%#Eval("RoleName")%></td>
                            <td class="txt80 c"><a href="AdmOperatorRecord.aspx?UserId=<%#Eval("UserNo") %>" title="操作记录">操作记录</a></td>
                            <td class="icon">
                            <%--box标记 EditUserInfo开始标记--%>   
                                <box id="EditUserInfo" title="编辑用户">
                                    <a class="opt" title="编辑" href="AdmUpdateUser.aspx?UserId=<%#Eval("UserNo") %>">
                                        <span class="icon-sprite icon-edit">
                                        </span>
                                    </a>
                                </box>
                            <%--box标记 EditUserInfo结束标记--%>   
                            </td> 
                        </tr>
                   	</ItemTemplate>
<FooterTemplate>
     </table>
   </FooterTemplate>
   </asp:Repeater>    
     </div>
</div>
</span>
<span id="spanFirst">第一页</span> <span id="spanPre">上一页</span> <span id="spanNext">下一页</span> <span id="spanLast">最后一页</span> 第<span id="spanPageNum"></span>页/共<span id="spanTotalPage"></span>页
</box>
       <%--box标记 UserList 结束标记--%>   
</box>
     <%--box标记 main 结束标记--%>   
</form>	
</body>
</html>

2.扫描界面获取所要分配权限的元素信息。

       由于界面上有了<box>这个元素来表示权限的元素,这样扫描起来就好一些了不过还是遇到了不少的问题,最终还是解决了,最难的是扫描出两个<box>之间的父子关系。下面是JS代码:

$(document).ready(function () {
    
    var rootboxs = document.getElementById("main");
    var child = rootboxs.childNodes;
    findchildbox(child)
    

});
//搜寻子节点
function findchildbox(parentNode) {

    for (var i = 0; i < parentNode.length; i++) {
        ///
        if (parentNode[i].nodeName == "BOX") {

            var childboxId = parentNode[i].id;
            var childboxTitle = encodeURI(parentNode[i].title);
            var parentbox = findparentbox(parentNode[i].parentNode);
            var parentboxId = parentbox.id;
            if (window.XMLHttpRequest) {
                //IE7 above,firefox,chrome^^
                xmlhttp = new XMLHttpRequest();
                //为了兼容部分Mozillar浏览器,当来自服务器响应开头不是xml,导致的无法响应问题
                if (xmlhttp.overrideMimeType) {
                    xmlhttp.overrideMimeType('text/xml');
                }
            }
            else if (window.ActiveXObject) {
                //IE5\IE6
                xmlhttp = new activeXObject("Microsoft.XMLHTTP");
            }
            if (xmlhttp == null || xmlhttp == undefined) {
                alert("con't create XMLHttpRequest Object");
            }
            //注册回调函数
            xmlhttp.onreadystatechange = callback;
            //发送信息
           
            xmlhttp.open('GET', '../../Manager/RoleManager/AddBox.ashx?childboxId=' + childboxId + '&childboxTitle=' + childboxTitle + '&parentboxId=' + parentboxId, true);
            xmlhttp.send(null);

        
            function callback() {
                //判断交互是否完成,是否正确返回
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                   
                }
            }
          
    }
      
            findchildbox(parentNode[i].childNodes)

    }
    
}

//查询父节点
function findparentbox(child) {
   
        if (child.nodeName == "BOX") {
            return child;
        } else {
           return findparentbox(child.parentNode)
            
        }
    
}

3.存入数据库中。

       利用AJAX存入到数据库中,一开始就遇到了问题,因为扫描界面所需要的时间太短在还没有把第一条数据插入到数据库的时候第二条数据就来了这样导致了第一条数据的部分信息就会被第二条记录替代了导致存入数据库的数据出现了问题。一开始我是打算在JS那里加上个延迟,结果表名不行。然后我就在一班程序里面加入一个类似锁的一个东西,算作延迟吧这样存入的数据就不会错误了下面是代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using BLL.Manager.RoleUserManagerBLL;
using System.Data;
using System.Text;
using Model;
using BLL;

namespace ExamSystemV3.Manager.RoleManager
{
    /// <summary>
    /// AddBox 的摘要说明
    /// </summary>
    public class AddBox : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            System.Threading.Thread.Sleep(1000);
            DIVEntity EDiv = new DIVEntity();
           AdmDIVManager admDIVManager = new AdmDIVManager();
           PublicBLL publicBll = new PublicBLL();
            string strChildBoxId = "";
            string strChildBoxTitle = ""; 
           
            strChildBoxId = context.Request.QueryString["childboxId"].ToString().Trim();
            strChildBoxTitle = context.Server.UrlDecode(context.Request.QueryString["childboxTitle"].ToString().Trim());
            string strParentBoxId=context.Request.QueryString["parentboxId"].ToString ().Trim();;
            string strState = "是";
            string strDateTime = publicBll.GetDate();
            string strIP = publicBll.GetWebClientIp();
            string strOperator ="xvshu";//context.Session["UserNo"].ToString().Trim(); ;
            EDiv.Id = strChildBoxId;
            EDiv.MainRelation = strParentBoxId;
            EDiv.DIVName = strChildBoxTitle;
            EDiv.DIVDescribe = strChildBoxTitle;
            EDiv.Operator = strOperator;
            EDiv.OperatorIP = strIP;
            EDiv.State = strState;
            EDiv.DateTime = strDateTime;
            admDIVManager.AddDIV(EDiv);
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

 

利用TreeView控件显示出来如下图:

 

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

权限控制--js动态生成的html

背景: 由于页面元素需要做权限控制,而shiro标签只能用在jsp页面,对于js动态生成的html则无能为力。 首先想到写一个判断是否有权限的js函数,该函数调用controller处理请求(ajax...

ASP.NET对HTML元素进行权限控制(三)

上一篇博客中有些没有考虑到的东西这次更改一下代码如下: 界面前台: ...
  • gwblue
  • gwblue
  • 2013-12-12 20:11
  • 1751

ASP.NET对HTML元素进行权限控制(一)

一个HTML页面有很多的元素比如,等。这些元素构成了HTML页面。在Web开发中权限控制是每个系统都要用到了。界面每个元素的权限也是需要控制的。比如一个查询用户的界面里面有查询用户按钮,添加用户按钮,...
  • gwblue
  • gwblue
  • 2013-12-04 17:09
  • 1662

pdf.js开发经验

在接触到一个需要支持在线阅读*.pdf文件的项目,查了一些资料,有不少JQuery插件可以支持在线阅读,但IE的默认情况下是需要下载后在本地观看的,为了支持IE故选择了pdf.js采用html5来实现...

asp.net权限控制的方式

我们在使用asp.net开发Web程序的时候经常

ASP.net Menu控件动态添加菜单项实现权限控制

对于动态菜单生成,在很多具有权限控制的项目中非常常见。最近遇到一个需求就是不同用户具有不同权限,该权限是页面级的,所以需要根据不同用户的权限情况动态生成菜单项。        首先,我把菜单项中的内...

asp.net core mvc权限控制:分配权限

前面的文章介绍了如何进行权限控制,即访问控制器或者方法的时候,要求当前用户必须具备特定的权限,但是如何在程序中进行权限的分配呢?下面就介绍下如何利用Microsoft.AspNetCore.Ident...

Asp.net 权限控制 利用用户控件include到页面

为了使用户能够根据需要方便地定义控件,ASP.NET引入了 Web 窗体用户控件的概念。实际上,只要将.aspx稍作修改即可转换为 Web 用户控件,扩展名为 .ascx,.ascx和.aspx文件一...

基于ASP.NET MVC URL 权限控制

基于ASP.NET MVC URL 权限控制 **1. 在ASP.NET MVC项目中新建一个AccountHelper类,这是一个辅助类。GetPermissionItems方法用于获取权限ID和页...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)