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


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

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

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

  • 相关阅读:
    前路漫长
    OEL6 /boot分区删除恢复
    区块链:剖析工作量证明
    【转】区块链:Schnoor签名究竟是什么
    使用 Hyperledger Fabric 开展私密交易
    Sovrin:技术落地可期,但推广难度较高
    白硕:区块链技术与数据隐私(附视频)
    从入门到精通零知识证明与zkSNARK
    区块链安全:匿名性以及隐私性
    朋友去面试Python工程师,又带回来几道基础题,Python面试题No10
  • 原文地址:https://www.cnblogs.com/Geton/p/4157133.html
Copyright © 2020-2023  润新知