http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 4499|回复: 5

[Winform] 第一次发帖,分享ERP程序开发之权限设置心得

[复制链接]
发表于 2013-11-20 17:30:02 | 显示全部楼层 |阅读模式
本帖最后由 lovebeyond 于 2013-11-20 17:35 编辑

权限控制在系统开发之初就要设定好,这个是ERP等数据库系统的核心。

步骤一:权限类
[C#] 纯文本查看 复制代码
      /// <summary>
        /// 权限类
        /// </summary>
        /// <param name="form_name">窗体名称</param>
        /// <param name="users">用户编号</param>
        /// <param name="pro_num">程序名称</param>
        public void search_role_ff(Form form_name,string users,string pro_num)
        {
            SqlConnection con = new SqlConnection(ClassL.EncodeAndDecode.passString()); // 字符串解密, SqlDataAdapte 无须open和close

string commString = string.Format("select User_Role_dt.users,sys_admin,pro_num,pro_role from User_Role_dt left join User_Role_ds on User_Role_ds.users=User_Role_dt.users and pro_num=@pro_num where User_Role_dt.users = @users");
            SqlDataAdapter sqldata = new SqlDataAdapter(commString, con); 
            sqldata.SelectCommand.Parameters.Add("@pro_num",SqlDbType.Char,20).Value =  pro_num;
            sqldata.SelectCommand.Parameters.Add("@users",SqlDbType.Char,10).Value =  users;
            DataTable datatable1 = new DataTable();
            sqldata.Fill(datatable1);

            if (datatable1.Rows.Count == 0)
            {
                MessageBoxEx.Show("没有可进入的授权,请联系系统管理员!","提示:",MessageBoxButtons.OK,MessageBoxIcon.Hand);
            }
            else
            {
                if (datatable1.Rows[0]["sys_admin"].ToString() == "Y")
                {
                    ClassL.classL.UserRole_Form.value = "YYYYYYY";
                    form_name.Show();
                }
                else //非超级管理员
                {
                    if ( string.IsNullOrEmpty(datatable1.Rows[0]["pro_role"].ToString()))
                    {
                        MessageBoxEx.Show("没有可进入的授权,请联系系统管理员!", "提示:", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    }
                    else
                    {
                        ClassL.classL.UserRole_Form.value = datatable1.Rows[0]["pro_role"].ToString();//执行成功后则将 该窗体权限赋值给该窗体
                        form_name.Show();
                    }
                }
            }
        }




步骤二:按钮事件
private void 订单交期确认_Click(object sender, EventArgs e)
       {
           ClassL.Sys_Class newclass = new ClassL.Sys_Class();

           Sales_Manage.Order_delivery_Form Order_delivery_Form = new Sales_Manage.Order_delivery_Form();
           newclass.search_role_ff(Order_delivery_Form, ClassL.classL.UserS.value.ToString(), "Order_delivery_Form");
       }


-- 权限设置说明
1、录入程序信息
2、录入用户权限(双档表,分单头和单身,有些ERP 是三档,如果有设置 金额和单价等财务权限,则需做权限扩展,并且对应窗体显示方法)
QQ图片20131120170157.jpg
3、程序打开时查询“用户权限表”,验证当前登录用户是否有权限
4、根据权限设置各程序窗体按钮 Enabled属性
[C#] 纯文本查看 复制代码
    private void role_ff()
        {
            string role = ClassL.classL.UserRole_Form.value.ToString().Trim();

            if (role.Substring(0, 1) == "Y") //新增
            {
                Create_Btn.Enabled = true;//新增
            }
            else
            {
                Create_Btn.Enabled = false;//新增
            }

            if (role.Substring(1, 1) == "Y") //查询
            {
                Search_Btn.Enabled = true;//查询
            }
            else
            {
                Search_Btn.Enabled = false;//查询
            }

            if (role.Substring(2, 1) == "Y") //修改
            {

                Modify_Btn.Enabled = true;//未审核允许修改,具体业务逻辑较为复杂,根据实际情况做具体设置。

            }
            else   //无
            {
                Modify_Btn.Enabled = false;//修改
            }
        }


-- 声明: 原创帖,转载请注明来自 苏飞 论坛。


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-11-20 17:44:08 | 显示全部楼层
简单看了一下,没时间了,下班了,就说第一个吧
步骤一:权限类
这个我个人认为不管怎么样都不能把数据访问与逻辑层放一起,数据访问,就是数据访问,不要加逻辑。
再就是。
另外我现在不管在任何情况下都不会使用SqlDataAdapte
只会用SqlDataReader
因为前者比较影响性能。
这个不是绝对,要和系统相关,也许是我做的项目原因,我做的大部分是对性能需求及高的。
Erp还真没有开发过。
发表于 2013-11-20 17:46:18 | 显示全部楼层
role.Substring(2, 1) 这种如果是我我可能会写成对象的方式,
http://www.sufeinet.com/forum.php?mod=viewthread&tid=315

以我看来权限只要是能实现动态,能控制就算是干的不错了,呵呵
 楼主| 发表于 2013-11-20 18:01:24 | 显示全部楼层
站长苏飞 发表于 2013-11-20 17:44
简单看了一下,没时间了,下班了,就说第一个吧
步骤一:权限类
这个我个人认为不管怎么样都不能把数据访 ...

SqlDataAdapte 和 SqlDataReade 性能的差异,以前也看到过类似的说明,后续我会注意的,感谢!
发表于 2013-11-20 19:21:19 | 显示全部楼层
lovebeyond 发表于 2013-11-20 18:01
SqlDataAdapte 和 SqlDataReade 性能的差异,以前也看到过类似的说明,后续我会注意的,感谢!

这个其实如果你是研究应用系统,我感觉也没有必要不用,
我估计在每表一个亿以内的数据使用SqlDataAdapte 是不会怎么影响性能的,相比而方SqlDataAdapte 更具操作性,
但是如果面向对象的开发,还是要使用SqlDataReader比较方便一些。


发表于 2013-11-21 12:50:09 | 显示全部楼层
受教了,学习中……
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-12-19 12:59

© 2014-2021

快速回复 返回顶部 返回列表