六、EnterpriseFrameWork框架基础功能之权限管理

回《【开源】EnterpriseFrameWork框架系列文章索引

从本章开始进入框架的第二块内容“EnterpriseFrameWork框架的基础功能”,包括:权限管理、字典数据管理、报表管理和消息管理四块,这些功能又包括两个版本,Web版和Winform版也就是说有两套界面;

既然开始讲基础功能,顺便说一下EnterpriseFrameWork框架的适用范围,前面也有提到过就是此框架适合中小团队这是一方面,还一方面就是此框架适合行业应用系统软件的开发,你用它做一个“超市库存管理系统”、“企业EPR”等类似系统是非常适合的;但如果觉得用它有Web开发模式,就用它来开发互联网应用的话还是很麻烦的;互联网的功能的开放性、随意性在此框架中受很大的限制,所以在这系列完成后,下一个系列中我会继续分享针对“互联网应用开发的平台系列”,敬请期待!

继续本章的内容讲解框架的“权限管理”,从本章的讲解思路分成下面几个部分:

1)功能清单介绍

2)功能界面展示

3)核心业务流程图与数据库表关系图

4)关键点的技术实现代码

权限管理功能清单


模块名称


功能名称


功能说明


权限管理


系统登录


输入正确用户名和密码,点击确定登录
登录界面的背景图片和系统名称可以自定义


系统主界面


登录后进入的主界面,菜单根据用户配置的权限动态生成
支持登录后切换部门
内嵌消息提醒面板(类似QQ通知)


机构管理


添加机构、启用停用机构
添加机构会默认添加一个超级用户用来管理此机构的所有业务


用户部门管理


用户管理,新增、修改、停用用户,用户配置部门和设置角色
部门分类,新增、修改、删除
部门管理,新增、修改、停用部门


系统菜单管理


菜单维护,新增、修改、删除菜单,设置菜单的图片等


角色权限配置


角色维护,新增、删除角色
角色配置对应的菜单

权限管理功能界面展示,包括Winform版和Web版

1)登录

2)主界面

3)机构管理

4)用户部门管理

5)系统菜单管理

6)角色权限配置

权限管理核心业务流程图与数据库表关系图

权限管理关键点技术实现

1)登录控制器LoginController

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using EFWBaseLib.Entity;
using EFWBaseLib.ObjectModel.RightManager;
using EFWBaseLib.ObjectModel.UserLogin;
using EFWBaseLib.WinController.IViewform;
using EFWCoreLib.CoreFrame.BusinessArchitecture;
using EFWCoreLib.CoreFrame.Init;
using EFWCoreLib.WinformFrame.Controller;
using EFWCoreLib.WinformFrame.Common;
using System.Management;
using EFWCoreLib.CoreFrame.Common;

namespace EFWBaseLib.WinController.Ation
{
    [EFWCoreLib.WinformFrame.Controller.Menu]
    [View(DllName = "EFWWin.exe", ViewTypeName = "EFWWin.Viewform.FrmLogin", DefaultView = true)]
    [View(DllName = "EFWWin.exe", ViewTypeName = "EFWWin.Viewform.FrmMain")]
    [View(DllName = "EFWWin.exe", ViewTypeName = "EFWWin.Viewform.FrmMainRibbon")]
    [View(DllName = "EFWWin.exe", ViewTypeName = "EFWWin.Viewform.FrmSetting")]
    [View(DllName = "EFWWin.exe", ViewTypeName = "EFWWin.Viewform.ReDept")]
    [View(DllName = "EFWWin.exe", ViewTypeName = "EFWWin.Viewform.FrmPassWord")]
    [View(DllName = "EFWWin.exe", ViewTypeName = "EFWWin.Viewform.FrmWeclome")]
    public class LoginController : BaseController
    {
        IfrmLogin frmlogin;
        IfrmMain frmmain;

        #region 登录
        private Form _frmsplash;

        public Form Frmsplash
        {
            get { return _frmsplash; }
            set { _frmsplash = value; }
        }

        public override void Init()
        {
            frmlogin = (IfrmLogin)iBaseView["FrmLogin"];

            int mainStyle = EFWCoreLib.WinformFrame.Common.CustomConfigManager.GetMainStyle();
            if (mainStyle == 0)
                frmmain = (IfrmMain)iBaseView["FrmMain"];
            else
                frmmain = (IfrmMain)iBaseView["FrmMainRibbon"];
        }

        public void UserLogin()
        {
            User user = NewObject<User>();
            bool islogin = user.UserLogin(frmlogin.usercode, frmlogin.password);

            if (islogin)
            {
                BaseUser EbaseUser = user.GetUser(frmlogin.usercode);
                SysLoginRight right = new SysLoginRight();
                right.UserId = EbaseUser.UserId;
                right.EmpId = EbaseUser.EmpId;
                right.WorkId = EbaseUser.WorkId;

                Dept dept = NewObject<Dept>();
                BaseDept EbaseDept = dept.GetDefaultDept(EbaseUser.EmpId);
                if (EbaseDept != null)
                {
                    right.DeptId = EbaseDept.DeptId;
                    right.DeptName = EbaseDept.Name;
                }

                BaseEmployee EbaseEmp = (BaseEmployee)NewObject<BaseEmployee>().getmodel(EbaseUser.EmpId);
                right.EmpName = EbaseEmp.Name;

                BaseWorkers EbaseWork = (BaseWorkers)NewObject<BaseWorkers>().getmodel(EbaseUser.WorkId);
                right.WorkName = EbaseWork.WorkName;

                if (EbaseWork.DelFlag == 0)
                {
                    string regkey = EbaseWork.RegKey;
                    DESEncryptor des = new DESEncryptor();
                    des.InputString = regkey;
                    des.DesDecrypt();
                    string[] ret = (des.OutString == null ? "" : des.OutString).Split(new char[] { ‘|‘ });
                    if (ret.Length == 2 && ret[0] == EbaseWork.WorkName && Convert.ToDateTime(ret[1]) > DateTime.Now)
                    {
                        AppGlobal.cache.Add("RoleUser", right);

                        frmmain.UserName = right.EmpName;
                        frmmain.DeptName = right.DeptName;
                        frmmain.WorkName = right.WorkName;

                        frmmain.modules = NewObject<Module>().GetModuleList(right.UserId).OrderBy(x => x.SortId).ToList();
                        frmmain.menus = NewObject<EFWBaseLib.ObjectModel.RightManager.Menu>().GetMenuList(right.UserId);
                        frmmain.depts = NewObject<Dept>().GetHaveDept(right.EmpId);

                        frmmain.showSysMenu();
                        ShowWeclomeForm();
                        ((Form)frmmain).Icon = System.Drawing.Icon.ExtractAssociatedIcon(EFWCoreLib.CoreFrame.Init.AppGlobal.AppRootPath + @"images\msn.ico");
                        ((Form)frmmain).Show();

                        //InitMessageForm();//?

                        CustomConfigManager.xmlDoc = null;
                    }
                    else
                    {
                        throw new Exception("登录用户的当前机构注册码不正确!");
                    }
                }
                else
                {
                    throw new Exception("登录用户的当前机构还未启用!");
                }
            }
            else
            {
                throw new Exception("输入的用户名密码不正确!");
            }
        }

        public void ShowWeclomeForm()
        {
            frmmain.ShowForm((Form)iBaseView["FrmWeclome"], "首页", "1");
        }

        public string GetBackGroundImage()
        {
            return CustomConfigManager.GetBackgroundImage();
        }

        public void ReLogin()
        {
            frmlogin.isReLogin = true;
            ((Form)frmlogin).ShowDialog();
        }

        public void Quit()
        {
            _frmsplash.Dispose();
        }
        #endregion

        #region 设置
        public void OpenSetting()
        {
            List<InputLanguage> list = new List<InputLanguage>();
            foreach (InputLanguage val in InputLanguage.InstalledInputLanguages)
            {
                list.Add(val);
            }
            ((IfrmSetting)iBaseView["FrmSetting"]).languageList = list;
            ((IfrmSetting)iBaseView["FrmSetting"]).inputMethod_CH = CustomConfigManager.GetInputMethod(EFWCoreLib.WinformFrame.CustomControl.EN_CH.CH);
            ((IfrmSetting)iBaseView["FrmSetting"]).inputMethod_EN = CustomConfigManager.GetInputMethod(EFWCoreLib.WinformFrame.CustomControl.EN_CH.EN);

            //打印机
            ManagementObjectSearcher query;
            ManagementObjectCollection queryCollection;
            string _classname = "SELECT * FROM Win32_Printer";

            query = new ManagementObjectSearcher(_classname);
            queryCollection = query.Get();
            ((IfrmSetting)iBaseView["FrmSetting"]).loadPrinter(queryCollection, CustomConfigManager.GetPrinter(0), CustomConfigManager.GetPrinter(1), CustomConfigManager.GetPrinter(2));
            //消息
            ((IfrmSetting)iBaseView["FrmSetting"]).runacceptMessage = CustomConfigManager.GetrunacceptMessage() == 1 ? true : false;
            ((IfrmSetting)iBaseView["FrmSetting"]).displayWay = CustomConfigManager.GetDisplayWay() == 1 ? true : false;
            ((IfrmSetting)iBaseView["FrmSetting"]).setbackgroundImage = CustomConfigManager.GetBackgroundImage();
            ((IfrmSetting)iBaseView["FrmSetting"]).mainStyle = CustomConfigManager.GetMainStyle();
            ((Form)iBaseView["FrmSetting"]).ShowDialog();
        }

        public void SaveSetting()
        {
            ((Form)iBaseView["FrmSetting"]).Close();
            CustomConfigManager.SaveConfig(((IfrmSetting)iBaseView["FrmSetting"]).inputMethod_EN, ((IfrmSetting)iBaseView["FrmSetting"]).inputMethod_CH, ((IfrmSetting)iBaseView["FrmSetting"]).printfirst, ((IfrmSetting)iBaseView["FrmSetting"]).printsecond, ((IfrmSetting)iBaseView["FrmSetting"]).printthree, ((IfrmSetting)iBaseView["FrmSetting"]).runacceptMessage ? 1 : 0, ((IfrmSetting)iBaseView["FrmSetting"]).displayWay ? 1 : 0, ((IfrmSetting)iBaseView["FrmSetting"]).setbackgroundImage, ((IfrmSetting)iBaseView["FrmSetting"]).mainStyle);
        }
        #endregion

        #region 切换科室
        public void OpenReDept()
        {
            ((IfrmReSetDept)iBaseView["ReDept"]).UserName = base.GetSysLoginRight.EmpName;
            ((IfrmReSetDept)iBaseView["ReDept"]).WorkName = base.GetSysLoginRight.WorkName;
            ((IfrmReSetDept)iBaseView["ReDept"]).loadDepts(frmmain.depts,GetSysLoginRight.DeptId);
            ((Form)iBaseView["ReDept"]).ShowDialog();
        }

        public void SaveReDept()
        {
            BaseDept dept = ((IfrmReSetDept)iBaseView["ReDept"]).getDept();
            ((SysLoginRight)EFWCoreLib.CoreFrame.Init.AppGlobal.cache.GetData("RoleUser")).DeptId = dept.DeptId;
            ((SysLoginRight)EFWCoreLib.CoreFrame.Init.AppGlobal.cache.GetData("RoleUser")).DeptName = dept.Name;
            frmmain.DeptName = dept.Name;
        }
        #endregion

        #region 修改密码
        public void OpenPass()
        {
            ((IfrmPassWord)iBaseView["FrmPassWord"]).clearPass();
            ((Form)iBaseView["FrmPassWord"]).ShowDialog();
        }
        public void AlterPass()
        {
            bool b = NewObject<User>().AlterPassWrod(GetSysLoginRight.UserId, ((IfrmPassWord)iBaseView["FrmPassWord"]).oldpass, ((IfrmPassWord)iBaseView["FrmPassWord"]).newpass);
            if (b == false)
                throw new Exception("您输入的原始密码不正确!");
        }
        #endregion

        #region 消息提醒
        /*//?
        MessageTimer mstimer = null;//消息提醒触发器
        public void InitMessageForm()
        {
            if (mstimer != null)
            {
                mstimer.Enabled = false;
                if (TaskbarForm.instance != null)
                    TaskbarForm.instance.ClearMessages();
            }

            mstimer = new MessageTimer();
            mstimer.FrmMain = (Form)frmmain;
            //mstimer.Interval = 20000;
            mstimer.Enabled = true;
        }

        public void ShowMessageForm()
        {
            TaskbarForm.ShowForm((Form)frmmain);
        }
         */
        #endregion
    }
}

2)页面内部子权限控制

时间: 2024-10-11 16:49:42

六、EnterpriseFrameWork框架基础功能之权限管理的相关文章

九、EnterpriseFrameWork框架基础功能之消息管理

记得阿朱在<走出软件作坊>一书中有一章讲客户提的需求太邪门了,鼠标键盘不太会用要程序员开发一个语音输入功能,还要系统中带类似QQ的功能:确实刚开始的客户的想法有点天真,但是随着信息化的越来越普遍,客户对信息系统也比较了解,特别年轻的信息管理人员,除了接受能力强,并且长期站在客户的角度对信息系统也有一些独特的见解,跳出技术框框外的想法: 其中有个年轻的信息人员聊天的时候说了一些对系统的要求,其中有一个功能是这样的,部门人员向库房申请一批物资,以前的做法就是先把申请单内容录入系统,然后再电话通知库

七、EnterpriseFrameWork框架基础功能之字典数据配置管理

框架中的“通用字典数据配置管理”主要解决的问题是,所有的行业软件给客户实施第一步一般都是基础数据的维护,一个系统的字典是少不了的,涉及业务范围越广字典就越多,如果每一个字典数据都做一个界面来进行维护数据的话,那开发工作量还是比较大的,所以得考虑设计一个通用的模块来管理这些字典数据: 1)通用字典管理功能清单 模块名称 功能名称 功能说明 系统字典数据 基础数据配置 字典分类目录,新增.修改.删除字典管理,1)选择数据库表添加字典2)根据数据库表字段,生成界面控件元素3)对数据库表进行增.删.改.

八、EnterpriseFrameWork框架基础功能之自定义报表

本章写关于框架中的“自定义报表”,类似上章“字典管理”也是三部分功能组成,包括配置报表.对报表按角色授权.查看报表:其核心思想就是实现新增一个报表而不用修改程序代码.不用升级,只需要编写一个存储过程,再设计一个报表格式就能够给客户使用:当然此功能也不是万能的,也不能解决项目中的所有报表需求,比如穿透报表.填报报表等就没办法了,只能自己代码搞定了: 本章内容不是讲制作报表,也不是讲报表工具,框架中没有报表组件,用的第三方的,Web版用的“ReportAll”.Winform版用的“Grid++ R

Liunx基础-文件的权限管理

1.Linux每个文件中,分为用户,用户组和其他人三种身份.在ls -l显示的文件属性中,第一位显示的是文件的类型,接下来三个为一组共三组,分别代表用户,用户组,其他人的权限,有r,w,x三种. ?? 如上图所示,第一位横杠代表是一个文件,后面三位分别代表了文件的用户,用户组和其他人的权限. 用户权限为rwx=读写执行,用户组权限为r-x=读和执行,其他人权限为r-x=读和执行. 2.注意,当要开放目录给任何人浏览时,至少要给予r和x的权限,但是w写入权限不可以随便赋予. 3.利用chmod可以

Shiro基础学习(一)&mdash;权限管理

一.基本概念 1.权限管理      只要有用户参与的系统一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源.     权限管理包括用户认证和授权两部分.   2.用户认证     用户认证,用户去访问系统,系统要验证用户身份的合法性. 最常用的用户身份验证的方法: (1)用户名密码方式 (2)指纹打卡机. (3)基于证书验证方法. 系统验证用户身份合法,用户方可访问系统的资源. (1)用户认证的流程        (2)关

Linux之小基础-用户和权限管理

一.何为Linux用户: Linux是个多用户多任务的分时操作系统,所有一个要使用系统资源的用户,都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面能帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问:另一方面也能帮助用户组织文件,并为用户提供安全性保护.每个用户账号都拥有一个惟一的用户名和用户口令.用户在登录时键入正确的用户名和口令后,才能进入系统和自己的主目录. 二.用户的分类: Unix/Linux系统中有两类用户超级用户(root)和一般用户

[ jenkins ] 基础安装及权限管理

1. 安装 jenkins 在安装 jenkins 之前需要 java 的支持 (1)安装 jdk1.8 [[email protected] ~]#tar xf jdk-8u77-linux-x64.tar.gz -C /usr/local/ [[email protected] ~]#ln -vs /usr/local/jdk1.8.0_77/bin/java* /usr/bin/ ‘/usr/bin/java’ -> ‘/usr/local/jdk1.8.0_77/bin/java’ ‘/

Linux运维基础-系统管理之权限管理

用户和组 用户userLinux用户:username/uid管理员:root,0普通用户:1-65535系统用户:1-499(cetnos6)1-999(centos7)组groupLinux组:groupname/gid管理组:root,0系统组:1-499(centos6)1-999(centos7)普通组:500+(centos6),1000+(centos7) 组的类别主要组:一个用户只允许一个主组附加组:一个用户可以属于零个或多个附加组命令:id 后跟用户名可以查看用户id和组 用户

Spring 框架基础(05):事务管理机制,和实现方式

本文源码:GitHub·点这里 || GitEE·点这里 一.Spring事务管理 1.基础描述 Spring事务管理的本质就是封装了数据库对事务支持的操作,使用JDBC的事务管理机制,就是利用java.sql.Connection对象完成对事务的提交和回滚. Connection conn = DriverManager.getConnection(); try { // 自动提交设置为false conn.setAutoCommit(false); // 执行增删改查操作 // 当操作成功后