ASP.NET對HTML頁面元素進行許可權控制(二)

來源:互聯網
上載者:User
這是這個許可權控制的第一步,掃描介面把要分配許可權的元素的資訊擷取出來存入到資料庫中。

這一步分三小步:

(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控制項顯示出來如:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.