大家都知道,程序员是很辛苦的,做为程序开发人员,肯定要想办法减轻工作量,以获得足够多的业余时间做自己喜欢做的事。做好接口,以方便后续把部分用户需求转架到HELPDESK组去,这样,不但省去了实现的时间,连谈需求的时间也省了。其实这篇的功能并不能节省多少时间。反而上一篇的条码设计节省了相当大的时间。废话少说,这里的权限控制,主要是控件页面的简单的增删改而已,并没有对特别字段做控制的。虽然比较简单,但也基本能满足大部分的需求了。这其中只涉及两个表,表也相当的简单,分别如下:

USERIGHT: 用户权限表,结构如下,主要是用户/群组对应某个模组的权限。

USERUSER: 用户与组的关联表。结构如下。

好了,下面是核心的代码。

        public void Run(){string format = "SELECT MAX(CANREAD) CANREAD,MAX(CANINS) CANINS,MAX(CANDEL) CANDEL,MAX(CANUPD) CANUPD ";format = format + "FROM USERIGHT where (SUSER='{0}' OR SUSER IN (SELECT ISA FROM USERUSER WHERE SUSER='{0}')) AND MODNAME='{1}'";SqlConnection connection = new SqlConnection(this.ConnectString);try{connection.Open();SqlCommand command = new SqlCommand();command.CommandText = string.Format(format, this.User, this.Module);command.Connection = connection;SqlDataReader reader = command.ExecuteReader();if (reader.Read()){if (reader["CANREAD"] != null){if (reader["CANREAD"].ToString().Trim() != ""){this.ViewState["CANREAD"] = reader["CANREAD"].ToString();}else{this.ViewState["CANREAD"] = "0";}}else{this.ViewState["CANREAD"] = "0";}if (reader["CANINS"] != null){if (reader["CANINS"].ToString().Trim() != ""){this.ViewState["CANINSERT"] = reader["CANINS"].ToString();}else{this.ViewState["CANINSERT"] = "0";}}else{this.ViewState["CANINSERT"] = "0";}if (reader["CANDEL"] != null){if (reader["CANDEL"].ToString().Trim() != ""){this.ViewState["CANDELETE"] = reader["CANDEL"].ToString();}else{this.ViewState["CANDELETE"] = "0";}}else{this.ViewState["CANDELETE"] = "0";}if (reader["CANUPD"] != null){if (reader["CANUPD"].ToString().Trim() != ""){this.ViewState["CANUPDATE"] = reader["CANUPD"].ToString();}else{this.ViewState["CANUPDATE"] = "0";}}else{this.ViewState["CANUPDATE"] = "0";}}else{this.ViewState["ERRMSG"] = "No record found!";}if ((this.ViewState["CANREAD"].ToString() == "0") && (this.ErrMsgPage.Trim() != "")){}}catch (Exception exception){this.ViewState["ERRMSG"] = exception.Message;}finally{connection.Close();}}

也是相当的简单,之所以用max,是取权限大者。 然后添加几个属性就可以封装成dll。在画面引用一下。就可以简单易用了。

画面加载的时候判断一下,如果没权限则跳转

其实最上面两个属性也可以做成默认的,这样每个画面又可以少两句了。如果画面涉及到增删改,也可以加入判断。即使是grid方面的。参考如下代码。

  if (e.Item.FindControl("btnDelete") != null){Button button = (Button)e.Item.FindControl("btnDelete");if (this.Useright1.CanDelete == 0){button.Attributes.Add("onclick", "alert('" + base.GetErrMsgXml(0x3eb) + "');return false; ");}else{button.Attributes.Add("onclick", "return confirm('" + base.GetErrMsgXml(0x3e8) + "');");}}

前台设置如下,也是相当简单。

这里没有技术难点。涉及的知识也相当简单。对一些初学者应该有用,如果大牛们有复杂控制的,相当全面的,望不吝赐教。

转载于:https://www.cnblogs.com/Geton/p/4157133.html

把权限控制做成用户控件--简易型相关推荐

  1. ASP.NET分页存储过程自定义用户控件

    网上有很多分页存储过程,但是基本上都是提供一个单纯的存储过程,没有具体的怎样去实现.最近做一个项目用户的数数据相当大(一百万以上的数据),如果用.NET自带的分页基本上是跑不动了,不是提示超时就是死在 ...

  2. 关于从页面中获取用户控件中的其它控件(如DropDownList)事件的方法

    在项目中经常把一些经常使用的代码做成用户控件以提高代码的可重用性, 一个经常遇到的就是在页面中调用用户控件中的服务器控件的事件,下面给出简单的代码示列. 我们在一个用户控件(MaterialRepor ...

  3. 学习笔记---母板页、用户控件、第三方控件及视图状态管理

    一.母版页 在制作页面的过程中, 多个页面往往具有相同的页面Header和页面Footer, 多个页面只是在中间部分有变化. 那么我们完全可以避免在每个页面中都写一遍页头和页尾的代码, 这种技术就是母 ...

  4. 无边框窗体和用户控件以及权限

    无边框窗体: 就是吧窗体的边框去掉,然后自己做按钮设置功能. 无边框窗体的移动: 将下面代码直接复制粘贴,将窗体的鼠标按下事件的方法改成下面方法的名字就可以直接使用 1 //窗体移动API 2 [Dl ...

  5. 用户控件如何控制ASPX页面的控件

    问题来自论坛http://topic.csdn.net/u/20120415/17/3f264265-b25c-4db8-a192-520e8a60e4c1.html?85396 问题分析,aspx页 ...

  6. (转) ASP.NET 2.0:使用用户控件和定制的Web部件个人化你的门户网站(二)

    Web部件目录 我们已经见过了如何在 WebPartZones 控件中事先放入Web部件.你还可以用另外一种方法完成这个功能,那就是允许用户在运行时添加新的Web部件.通过使用 CatalogZone ...

  7. [MOSS开发]:通过简单BUG跟踪Demo阐述用户控件对列表的操作

    下面的文章我想以一个具体的BUG跟踪Demo来说明MOSS的具体应用,这里面会应用到下面的知识点: 1:用户组,用户的创建,权限分配: 2:列表的概念以及创建: 3:利用用户控件来完成表单的增加加功能 ...

  8. 一步一步学Silverlight 2系列(10):使用用户控件

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  9. Windows Phone 7 不温不火学习之《创建用户控件》

    同样出自微软的产品,像ASP.NET 一样,Windows Phone 7 也有一个叫UserControl 的东西.这个相当于一个组件,类似于Android 继承View . 本篇将实现一个用户控件 ...

最新文章

  1. NGUI的技能冷却实现
  2. ijkplayer支持h264
  3. 代码重构(二):类重构规则
  4. vue 滚动条_轻量级 React.js 虚拟美化滚动条组件RScroll
  5. matlab音频基频的提取,(620512681) 自相关基频提取算法的MATLAB实现
  6. C语言写个贪吃蛇游戏
  7. 针织erp_编程源于我们长期的针织工作
  8. python怎么批量处理数据_python如何批量处理excel数据?_后端开发
  9. mysql实现主从复制
  10. 【开发工具之eclipse】7、eclipse代码自动提示,eclipse设置代码自动提示
  11. 纯种C++解析unicode文件
  12. 技术升级成为Linux运维人前途的魔障,是跟进还是选择被淘汰?
  13. java 设计模式学习笔记十三 observer设计者模式
  14. 【Java后台开发规范】--- Null值处理
  15. java ajaxsubmit_jQuery 使用 ajaxSubmit() 提交表单实现方法
  16. Endnote如何添加CAJ格式文件
  17. java中替换的快捷键是什么_idea替换快捷键,批量处理对象的操作
  18. 【基金学习】小白基金学习记录(一)
  19. 网页登录服务器怎么调节分辨率,怎样调节云服务器分辨率
  20. 踩坑 微信小程序开发mpvue使用iconfont,顺便解决偶现图标显示不正确

热门文章

  1. 《设计模式之禅》学习笔记(一)
  2. Spring in Action 入门之面向切面编程AOP
  3. 如果修改了表结构的话,可能也需要将调用到表的存储过程、函数等也修改一下,以下语句可以查询到那些对象调用到被修改的表...
  4. 【原】display:inline-block下的IE元素
  5. OOP三大特性之多态
  6. Delphi XE 10.2.3使用CEF4Delphi取网页元素时碰到nbsp;变问号?的处理
  7. 分布式系统用户登录路由
  8. Web 设计中的 5 个最具争议性的话题
  9. [Music]若是每个人都彼此关怀
  10. J2ME开发心得-数组的使用