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

这一步分三小步:

(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\IE6xmlhttp = 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控件显示出来如下图:

转载于:https://www.cnblogs.com/iplus/p/4490408.html

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

  1. tp3.2.3权限控制二之后台管理部分,及菜单栏目显示问题

    上篇记录了一下权限控制部分的实现过程,以及实现的代码.但那些只是实现了简单的权限控制,具体的后台当然要有用户的管理,用户组的管理,规则管理等.这篇主要是写后台部分,和上篇凑成一个完整的环. 第一篇文章 ...

  2. k26.第十一章 K8s进阶篇-细粒度权限控制 (二)

    2. RBAC实践 创建一个名为deployment-clusterrole的clusterrole ​ a) 该clusterrole只允许创建Deployment.Daemonset.Statef ...

  3. 3YAdmin-专注通用权限控制与表单的后台管理系统模板

    3YAdmin基于React+Antd构建.GitHub搜索React+Antd+Admin出来的结果没有上百也有几十个,为什么还要写这个东西呢? 一个后台管理系统的核心我认为应该是权限控制,表单以及 ...

  4. ABP开发框架前后端开发系列---(9)ABP框架的权限控制管理

    在前面两篇随笔<ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理>和<ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程>开始 ...

  5. day09【后台】权限控制-下

    day09[后台]权限控制-下 1.目标5:密码加密 1.1.修改数据库表结构 由于之前使用MD5加密,密码字段长度为32位:现采用带盐值的加密,需要修改密码字段的长度 顺带把密码也改了 1.2.注入 ...

  6. 众筹项目之后台管理系统-权限控制(九)

    目录 1. 项目中加入 SpringSecurity 1.1 加入 SpringSecurity 环境 2.1.1 依赖 1.1.2 在 web.xml 中配置 DelegatingFilterPro ...

  7. 如何用 Vue 实现前端权限控制

    本文来自作者 雅X共赏 在 GitChat 上分享 「如何用 Vue 实现前端权限控制(路由权限 + 视图权限 + 请求权限)」,「阅读原文」查看交流实录. 「文末高能」 编辑 | 哈比 为什么做前端 ...

  8. asp.net core根据用户权限控制页面元素的显示

    asp.net core根据用户权限控制页面元素的显示 Intro 在 web 应用中我们经常需要根据用户的不同允许用户访问不同的资源,显示不同的内容,之前做了一个 AccessControlHelp ...

  9. asp.net core mvc权限控制:在视图中控制操作权限

    在asp.net core mvc中提供了权限验证框架,前面的文章中已经介绍了如何进行权限控制配置,权限配置好后,权限验证逻辑自动就会执行,但是在某些情况下,我们可能需要在代码里或者视图中通过手工方式 ...

  10. 在ASP.NET MVC里对Web Page网页进行权限控制

    我们在ASP.NET MVC开发时,有时候还是得设计ASP.NET的Web Page网页(.aspx和.aspx.cs),来实现一些ASP.NET MVC无法实现的功能,如此篇<Visual S ...

最新文章

  1. Java 线程第三版 第四章 Thread Notification 读书笔记
  2. docker启动elasticsearch失败--jvm内存不足解决方案
  3. 制表符补全位数在idea和eclipse中的区别
  4. XML::Simple与Data::Dumper在Perl中的使用
  5. 远程服务器系统管理,如何远程管理服务器系统(转载)
  6. Python小游戏(24点小游戏)
  7. java中scort意思_java入门—笔记
  8. 测试Live Write的发布功能
  9. 改变Linux的DNS解析顺序(DNS到hosts)
  10. 吴恩达深度学习笔记 course2 week2 优化算法
  11. python论文排版格式_一行代码简化Python异常信息:错误清晰指出,排版简洁美观 | 开源...
  12. POJ-Bound Found | 尺取法+绝对值特性
  13. openCV教程04
  14. 华为公司 代码编码规范
  15. 初学HTML5:Web workers
  16. 龙芯版UOS 自带浏览器无法使用flash在线播放视频
  17. 云储存技术的应用与用到的技术
  18. 玻璃温室建造工程中不容忽视的桁架结构
  19. SD卡结构、检测方式
  20. python 将MP3格式转换为WAV格式(ffmpeg安装,使用pycharm安装包)

热门文章

  1. 关于JS获取标签中的的方法及上传下载
  2. 计蒜客模拟赛D2T3 蒜头君救人:用bfs转移状压dp
  3. 函数, lambda表达式
  4. 504 Gateway Time-out 和 502 Bad Gateway相关处理
  5. [翻译][HTML]CELLPADDING and CELLSPACING
  6. 虚拟机利用Host-only实现在不插网线的情况下,虚拟机与主机实现双向通信,实现ssh连接以及samba服务实现共享...
  7. 云计算基础概念 笔记
  8. boost::array与std::vector使用与性能
  9. 以太坊概念知识入门篇
  10. 3013C语言_输入输出