ASP.NET은 HTML 페이지 요소에 대한 권한을 제어합니다(2).

高洛峰
풀어 주다: 2017-02-03 15:05:30
원래의
1336명이 탐색했습니다.

이것은 권한 제어의 첫 번째 단계입니다. 스캐닝 인터페이스는 권한을 할당할 요소의 정보를 획득하여 데이터베이스에 저장합니다.

이 단계는 세 가지 작은 단계로 구분됩니다:

(1) 인터페이스에서 권한을 할당할 요소를 표시합니다

(2). 권한을 할당할 요소 정보를 얻기 위한 인터페이스입니다. (ID, 직위, 계층관계)

(3) 데이터베이스에 저장합니다.

1. 권한을 할당할 인터페이스 요소를 표시합니다.

스캔할 때 HTML 요소가 너무 많고 계층 관계도 많아서 처음에는 어려웠습니다. 처음에는 권한이 할당된 HTML 요소를 나타내기 위해

태그를 사용했습니다. 예를 들어 사용자 추가 버튼에 DIV를 추가하면 버튼이 변경되고 현재 작업 중인 KS 시스템의 스타일을 조정해야 합니다. 또한 현재 인터페이스의 스타일이 결정되고 CSS도 조정되었습니다. DIV가 추가되면 인터페이스를 다시 조정해야 합니다. 이 문제에 대해 2~3일 동안 고민한 끝에 HTML 요소 태그는 다음과 같습니다. 및 제목을 이 태그에 추가합니다: , 이 태그를 사용하여 권한이 할당될 요소를 표시합니다. 이런 방식으로 스타일을 변경하지 않고도 필요한 정보를 얻을 수 있습니다. 변경 후 인터페이스 배경 코드는
<!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. 인터페이스를 스캔하여 권한이 할당될 요소 정보를 얻습니다.

인터페이스에 권한 요소를 나타내는 요소가 있으므로 스캔하기가 더 쉽습니다. 하지만 여전히 많은 문제가 발생했는데 가장 어려운 점은 해결되었습니다. 두 개의 사이의 상위-하위 관계를 스캔합니다. 다음은 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(&#39;text/xml&#39;); 
} 
} 
else if (window.ActiveXObject) { 
//IE5\IE6 
xmlhttp = new activeXObject("Microsoft.XMLHTTP"); 
} 
if (xmlhttp == null || xmlhttp == undefined) { 
alert("con&#39;t create XMLHttpRequest Object"); 
} 
//注册回调函数 
xmlhttp.onreadystatechange = callback; 
//发送信息 

xmlhttp.open(&#39;GET&#39;, &#39;../../Manager/RoleManager/AddBox.ashx?childboxId=&#39; + childboxId + &#39;&childboxTitle=&#39; + childboxTitle + &#39;&parentboxId=&#39; + 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 컨트롤을 사용하여 다음과 같이 표시합니다. 아래 표시:

ASP.NET은 HTML 페이지 요소에 대한 권한을 제어합니다(2).

HTML 페이지 요소에 대한 ASP.NET 권한 제어에 대한 자세한 내용은 (2) 관련 기사는 PHP 중국어 웹사이트를 참고하세요!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!