把权限控制做成用户控件--简易型

大家都知道,程序员是很辛苦的,做为程序开发人员,肯定要想办法减轻工作量,以获得足够多的业余时间做自己喜欢做的事。做好接口,以方便后续把部分用户需求转架到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 FROMUSERUSER 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) + "‘);");
                }
            }

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

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

时间: 2024-08-25 13:57:42

把权限控制做成用户控件--简易型的相关文章

使用CefSharp 在C#用户控件中嵌入Chrome浏览器使用方法

CEF(Chromium Embedded Framework, 嵌入式Chromium框架)是C/C++开发的库 目前 Google Chrome(Google浏览器),Chromium浏览器,Opera等都是基于CEF为核心,Webkit引擎的浏览器. Xilium.CefGlue是对CEF项目的.net的包装,它是用P/Invoke的方式来调用CEF类库.CEFSharp是用C++/CLI的方式来调用CEF类库的. 原先使用的是Xilium.CefGlue,如果只是单纯在窗口上实现的话是没

用户控件(.ascx)与<ul><li>以及<a>布局之小结

用户控件(.ascx)与<ul><li>以及<a>布局 小结 一.用户控件(.ascx) 1.aspx是浏览器直接访问的页面,而ascx是用户控件,一般是用来重用. 比如:有2个aspx页面,有一部分代码一样,这里可以提取出来做成用户控件(ascx)就可以重用了. 如果单纯N个aspx页面,就只能复制粘贴,要修改时候就很麻烦了. 2.ascx不能直接访问,只能插入aspx页面呈现. 例如网站:页眉导航.页脚每个页都有,所以我们经常会将它们做成用户控件,然后每个页面引用进

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

无边框窗体: 就是吧窗体的边框去掉,然后自己做按钮设置功能. 无边框窗体的移动: 将下面代码直接复制粘贴,将窗体的鼠标按下事件的方法改成下面方法的名字就可以直接使用 1 //窗体移动API 2 [DllImport("user32.dll")] 3 public static extern bool ReleaseCapture(); 4 [DllImport("user32.dll")] 5 public static extern bool SendMessag

在ASP.NET中动态加载内容(用户控件和模板)

在ASP.NET中动态加载内容(用户控件和模板) 要点: 1. 使用Page.ParseControl 2. 使用base.LoadControl 第一部分:加载模板 下 面是一个模板“<table width=100%><tr><td width=100% colspan=2 runat=server id=ContainerTop></td></tr><tr><td width=30% runat=server id=Con

用户控件(二)--常见4 种路径问题解决:

二.路径:1.问题: 添加到用户控件中的图片以及超链接 都会有固定的路径,当将用户控件用到其他页面中后,对应的页面路径需要发生变化,否则无法正常作用显示:解决: 在添加到用户控件中的 HTML 标记或者标准控件中添加:runat= server id=“id名”:这样服务端会根据使用情况自动更正图片或者超链接路径:注意: 超链接可以直接使用标准控件:Hyperlink 它里面直接带 runat=server: 2.问题?样式表中值的路径:(例)background-image:url(路径) 解

无边框窗体、用户控件、Timer控件

一.无边框窗体1 最大化.最小化以及关闭按钮制作 实际上就是更换点击前.指向时.点击时的图片 (1)将图片放在该文件夹的Debug中, 获取图片的路径 Application.StartupPath + "\\图片名.类型"(2)若是放在该文件夹的中,Application.StartupPath + "\\..\\..\\images\\图片名.类型" \..\文件夹名称... 向上翻一个文件夹,上面的第一个\是转义 pictureBox2.BackgroundI

.net用户控件--un

用户控件用户控件是个什么东西?自定义的反复重用的控件集合 好处?1.代码重用2.结构良好3.分工开发4.局部缓存 难点:一.交换信息:(一)从页面向用户控件交换信息.代码写在页面中.1.用户控件名.FindControl("用户控件中的控件的ID")TextBox textBox1 = WUC1.FindControl("TextBox1") as TextBox; 2.事先在用户控件中定义public属性,通过属性为里面的控件赋值或取值.用户控件中的代码: pub

VB.Net中用户控件的使用

机房重构时,在界面的制作上有这样一个需要改进的地方.那就是在判断窗体上所有文本框时候为空的时候,弹出提示信息的问题.先看一下原先的代码: <pre name="code" class="vb"> Public Function IsEmptyText(ByVal objs As Form) As Boolean '遍历窗体中所有的控件 For i As Integer = objs.Controls.Count - 1 To 0 Step -1 '判断是

win10 uwp 验证输入 自定义用户控件

TextBox是给用户输入,我们有时要用户只输入数字,而用户输入汉字,我们就有提示用户,那么这东西用到次数很多,我们需要做成一个控件. 我们可以用别人的库,我找到一个大神写的库,很好用 我们使用这个库可以定义很多验证,我记录我如何使用他这个库,还有如何去修改这个库.如何自定义控件做一个和大神做的一样的控件. Nuget 我们用这个库是jamescroft写的,他上传到Nuget,我们可以去下载 用Nuget搜索WinUX.UWP.Xaml.Controls 下载完成就好 使用库 我们经常需要验证