ASP.NET教务管理平台-权限及公共模块设计与开发

news2024/12/29 10:31:07

   

随着教育改革的不断深化,高等院校的建设与发展对国民整体素质的提高起着越来越重要的作用,建立一套能够适应这些改变的行政管理方案也就显得尤为重要。对于教务处来说,将信息技术用于校务管理中便是迫切的要求。

教务系统中的用户数量众多,需要具有不同的权限,以实现不同的应用。本论文介绍了开发背景,开发平台,并基于需求分析实现了教务管理平台中基于角色控制的权限系统(RBAC)及公共模块的设计与开发。RBAC实现了用户与访问权限的逻辑分离,更符合教务平台的用户、数据和应用特征;在公共模块中实现了系统通用的日志管理,异常处理,常用类库方法等。通过设计和应用本系统,有效的解决了教务平台中关于用户管理与权限操作等方面的问题为系统公共模块的实现打下坚实的基础。通过较为详尽的功能测试,表明本文的设计内容具有一定的通用性,可用于需要动态分配权限与角色的管理系统中。

关键词: 权限;公共模块;RBAC

2.2  开发平台介绍

本毕业设计的命题是教务管理平台中权限系统和公共模块的设计和开发,根据团队要求和开发成本选择了Visual Studio 2005+SQL 2005开发环境,使用的语言为c#。

2.2.1  Visual Studio 2005介绍

Visual Studio 2005 是一系列高效的、智能的开发工具的统称,它拥有一个庞大的产品线,包括面向学生、爱好者、初学者的Express版,面向专家、Visual Basic 6的Standard版,面向顾问、企业开发人员的Professional版和面向架构师的Team System版本。在这些版本中,有些集成了开发软件常用到的东西,比如重构、单元测试、类设计器等等,以方便开发人员快速的设计各类软件。

2.2.2  SQL Server 2005介绍

SQL Server 2005 是一个全面的数据库平台,使用集成的商业智能工具提供了企业级的数据管理。SQL Server 2005 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。SQL Server 2005 数据引擎是企业数据管理解决方案的核心。此外 SQL Server 2005 结合了分析、报表、集成和通知功能。

2.3  开发技术介绍

2.3.1  Asp.net

ASP.NET是微软流行的动态WEB编程技术活动服务器网页(ASP)的最新版本,但它远不是传统ASP简单升级。ASP.NETASP的最大区别在于编程思维的转换,ASP.NET是真正的面向对象(Object-oriented),而不仅仅在于功能的增强。

ASP.NET中,Web 窗体页由两部分组成:视觉元素(HTML、服务器控件和静态文本和该页的编程逻辑。其中每一部分都存储在一个单独的文件中。可视元素在一个扩展名为 .aspx 文件中创建,而代码位于一个单独的类文件中,该文件称作代码隐藏类文件扩展名为.aspx.vb .aspx.cs。这样,.aspx文件中存放所有要显示的元素,aspx.vb.aspx.cs文件中存放逻辑。

2.3.2  RBAC

企业环境中的访问控制策略一般有三种:自主型访问控制方法、强制型访问控制方法和基于角色的访问控制方法(RBAC)。其中,自主式太弱,强制式太强,二者工作量大,不便于管理。基于角色的访问控制方法是目前公认的解决大型企业的统一资源访问控制的有效方法。其显著的两大特征是:1.减小授权管理的复杂性,降低管理开销;2.灵活地支持企业的安全策略,并对企业的变化有很大的伸缩性。

基于角色的访问控制RBAC作为一种灵活和直观的访问控制技术在20世纪90年代迅速发展起来,RBAC通过引入角色的新概念来实施访问控制策略。不同的角色和它所应具有的权限许可互相联系,用户作为某些角色的成员,获得角色所拥有的权限。角色可以根据实际的单位或组织的不同工作职能和权限来划分,依据用户所承担的不同权利和义务来授权相应的角色,对于一个存在大量用户和权限的权限分配系统来说,从用户到角色的管理,简化了权限分配的复杂性,提高了安全管理的效率和质量。

2.3.3  Identity和IPrincipal

Principal对象是实现了IPrincipal接口的类的实例,这些对象用来表示用户,并且包括了用户的身份信息。

对于每一个线程来说都与一个principal对象相关联。这个principal对象包括了表示运行当前线程的用户的identity对象。

4.2  权限系统模块的实现

系统主功能模块包括用户信息管理,角色管理,权限管理,资源与权限的绑定,用户与角色的绑定等。

4.2.1  用户信息管理和角色绑定

本系统中的起始页面为Login.aspx,如图8所示。

图8 系统登陆界面

用户点击【登录】时,系统初始化命名空间Njj.Accounts.bus下类User的一个user对象,将user赋予当前上下文user对象。根据用户当前的身份标识中的密码验证用户身份的有效性,若成功则设置用户系统登陆,添加日志,添加用户的用户信息到Session中,并且加载用户设置的界面风格,最后跳转到应用系统操作主界面。该程序代码如下所示。

AccountsPrincipal newUser = AccountsPrincipal.ValidateLogin(userName, Password); //根据用户名和密码初始化用户标识,实现iprincipal接口

        if (newUser == null)

        {

            this.lblMsg.Text = "登陆失败: " + userName;

        }

        else

        {

            User currentUser = new NJJ.Accounts.Bus.User(newUser);//根据用户标识初始化用户对象

            Context.User = newUser;   将当前上下文用户标识设为新用户

            if (((SiteIdentity)User.Identity).TestPassword(Password) == 0) //检测用户密码

            {

                this.lblMsg.Text = "你的密码无效!";

            }

            else

            {

                FormsAuthentication.SetAuthCookie(userName, false); //设置用户登陆

                NJJ.TreeAndLog.TreeAndLogManage log = new NJJ.TreeAndLog.TreeAndLogManage();                  log.AddLog(DateTime.Now.ToString(), "用户登陆", User.Identity.Name, "1");//添加日志

                Session["UserInfo"] = currentUser;  //session保存当前用户信息

                Session["Style"] = currentUser.Style; //session保存用户设置的界面风格

                if (Session["returnPage"] != null) 

                {

                    string returnpage = Session["returnPage"].ToString();

                    Session["returnPage"] = null;

                    Response.Redirect(returnpage);

                }

                else

                {

                    Response.Redirect("main.htm");

                }

            }

用户管理页面为:UserAdmin.aspx,界面如图9所示。

用户角色分配界面如图10所示。

图9 用户管理

图10 角色分配

页面初始化时调用函数user对象的GetAllUsers()方法获取所有用户数据并绑定到datagrid中。

点击图中的修改角色链接可进入用户与角色绑定界面。

4.2.2  角色管理和权限绑定

角色管理和权限绑定页面主要为RoleAdmin.aspx和EditRole.aspx,主要实现对增加新的角色、修改角色、删除角色,和角色对象权限的分配功能。如图11,图12所示。

图11 角色管理

图12 编辑角色信息

RoleAdmin.aspx页面调用了命名空间Njj.Accounts.bus下Role类对象的相关方法,GetRoleList()得到所有的角色列表,Create()建立新角色。

EditRole.aspx中,首先listbox中绑定某类别权限下的所有权限,点击增加权限按钮调用Role类对象的AddPermission()向角色分配对应的权限。

4.2.3  权限管理

权限管理主要实现权限类别及权限命名的管理,如图13所示。代码如下所示。

int CategoryId = int.Parse(this.ClassList.SelectedValue);

        DataSet PermissionsList = AccountsTool.GetPermissionsByCategory(CategoryId);

        this.DataGrid1.DataSource = PermissionsList;

        this.DataGrid1.DataBind();

图13 权限管理

本模块包含权限类别的添加,修改,删除,以及类别下子权限的添加,修改,删除等功能,主要针对命名空间下Njj.Accounts.Bus下的PermissionCategories和Permissions类进行操作。

4.2.4  系统资源管理和权限绑定及菜单操作

系统资源管理主页面为:TreeList.aspx和add.aspx,如图14,15所示。

此模块负责添加系统可访问的URL资源和菜单模块的操作。添加菜单时可以和对应的权限相绑定,以动态显示用户菜单。对于对应的URL文件可执行过滤功能,权限不够的用户将拒绝进入。

图14 系统资源管理

图15 添加资源并绑定权限

主要代码如下所示。

NJJ.TreeAndLog.TreeAndLogManage sm = new NJJ.TreeAndLog.TreeAndLogManage();

        DataTable dt = sm.GetTreeList("").Tables[0];

        this.listTarget.Items.Clear();

        //加载菜单选项到下拉列表中

        this.listTarget.Items.Add(new ListItem("根目录", "0"));

        DataRow[] drs = dt.Select("ParentID= " + 0);

        /循环读取,添加.

        foreach (DataRow r in drs)

        {

            string nodeid = r["NodeID"].ToString();

            string text = r["Text"].ToString();

            //string parentid=r["ParentID"].ToString();

            //string permissionid=r["PermissionID"].ToString();

            text = "╋" + text;

            this.listTarget.Items.Add(new ListItem(text, nodeid));

            int sonparentid = int.Parse(nodeid);

            string blank = "├";

            BindNode(sonparentid, dt, blank);

        }

        this.listTarget.DataBind();  绑定父类菜单

  /读取所有权限

       DataTable tabcategory = NJJ.Accounts.Bus.AccountsTool.GetAllCategories().Tables[0];

        int rc = tabcategory.Rows.Count;

        for (int n = 0; n < rc; n++)

        {

            string CategoryID = tabcategory.Rows[n]["CategoryID"].ToString();

            string CategoryName = tabcategory.Rows[n]["Description"].ToString();

            CategoryName = "╋" + CategoryName;

            this.listPermission.Items.Add(new ListItem(CategoryName, CategoryID));

            ///将权限绑定到下拉列表

            DataTable tabforums = NJJ.Accounts.Bus.AccountsTool.GetPermissionsByCategory(int.Parse(CategoryID)).Tables[0];

            int fc = tabforums.Rows.Count;

            for (int m = 0; m < fc; m++)

            {

                string ForumID = tabforums.Rows[m]["PermissionID"].ToString();

                string ForumName = tabforums.Rows[m]["Description"].ToString();

                ForumName = "  ├『" + ForumName + "』";

                this.listPermission.Items.Add(new ListItem(ForumName, ForumID));

            }

        }

        this.listPermission.DataBind();

        this.listPermission.Items.Insert(0, "--请选择--"); ///绑定权限

4.2.5  url过滤

系统对于普通的页面可以判断用户是否有权限来访问,通过继承类System.Web.UI.Page,并自写其中的Page_Load事件,生成公用的Page基类,由于asp.net的代码后置功能,对于web页面来说,判断其所属权限可以通过其后置代码类继承公共的Page基类,来达到代码重用的效果。该程序代码如下所示。

//权限验证

        if (Context.User.Identity.IsAuthenticated)  ///当前用户是否授权

        {

            AccountsPrincipal user = new AccountsPrincipal(Context.User.Identity.Name); //生成此用户的身份标识

            if (Session["UserInfo"] == null)  //如果Session保存的用户信息为空,则调用用户信息保存到session,页面重新加载

            {

                NJJ.Accounts.Bus.User currentUser = new NJJ.Accounts.Bus.User(user);

                Session["UserInfo"] = currentUser;

                Session["Style"] = currentUser.Style;

               Response.Write("<script defer>location.reload();</script>");

              

            }

           Permissions p = new Permissions();     ///session保存的用户信息不为空,调用权限表

           PermissionID=p.GetPermissionID(Request.FilePath.Substring(24).Trim()); ///  获取url请求

          

            if ((PermissionID != -1) && (!user.HasPermissionID(PermissionID))) 如果页面不为公共页面的话,则调用此页面的权限ID来判断用户是否有此权限

            {

                Response.Clear();

                Response.Write("<script defer>window.alert('您没有权限进入本页!\\n请重新登录或与管理员联系');history.back();</script>");  ///用户无权限,则重新登陆

                Response.End();

            }      

        }

        else

        {

            FormsAuthentication.SignOut();   ///用户没有授权的话,将注销用户。

            Session.Clear();

            Session.Abandon();

            Response.Clear();

            Response.Write("<script defer>window.alert('您没有权限进入本页或当前登录用户已过期!\\n请重新登录或与管理员联系!');parent.location='" + virtualPath + "/Login.aspx';</script>");

            Response.End();

        }      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1619357.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ROS 2边学边练(33)-- 写一个静态广播(C++)

前言 通过这一篇我们将了解并学习到如何广播静态坐标变换到tf2&#xff08;由tf2来转换这些坐标系&#xff09;。 发布静态变换对于定义机器人底座与其传感器或非移动部件之间的关系非常有用。例如&#xff0c;在以激光扫描仪中心的坐标系中推理激光扫描测量数据是最简单的。 这…

Ventus(承影):基于RISC V的开源GPGPU

Ventus&#xff08;承影&#xff09;&#xff1a;基于RVV的开源GPGPU 清华大学集成电路学院dsp-lab的承影RVV GPGPU设计文档。 整体目标 提供一个开源的基于RVV的GPGPU实现方案&#xff0c;并给出软件映射方案、指令集&#xff08;支持的指令及特性、添加的自定义指令&#xf…

15.接口自动化学习-Mock(挡板/测试桩)

场景&#xff1a; 新需求还未开发时&#xff0c;使用mock提早介入测试&#xff0c;等后边开发后&#xff0c;进行调试 三方接口返回效率低&#xff0c;使用mock技术走通流程 1.mock方式 &#xff08;1&#xff09;如果会写django或flask,可以写简单对应的代码 &#xff08;…

小米一面:说说MVC与设计模式的关系

前言 大家好&#xff0c;我叫阿杆&#xff0c;不叫阿轩。 先来看看面试环节吧。 面试官&#xff1a;请说说MVC模式是基于哪种设计模式的&#xff1f; 求职者&#xff1a;MVC本身不就是一种设计模式吗&#xff1f; 面试官&#xff1a;我的意思是&#xff0c;MVC是基于23中设计…

【04-提升模型性能:集成学习与超参数优化】

文章目录 前言集成学习BaggingBoosting超参数优化随机搜索贝叶斯优化总结前言 在前几篇博文中,我们已经介绍了一些机器学习的基础知识、Scikit-learn的核心工具与技巧,以及如何评估模型性能。本篇博文将重点讲解两个可以显著提升机器学习模型性能的高级策略:集成学习和超参数…

python企业员工培训考试系统django+vue

这次开发的供电公司安全生产考试系统管理员&#xff0c;教师&#xff0c;学生。管理员功能有个人中心&#xff0c;学生管理&#xff0c;教师管理&#xff0c;主观题信息管理&#xff0c;主观题回答管理&#xff0c;主观题评分管理&#xff0c;成绩信息管理&#xff0c;试卷管理…

命名空间:namespace

对于无名命名空间 &#xff1a;但是不能再次定义相同名称的变量 在同一文件中

Linux程序调试优化(2)—— 一次学会嵌入式Linux下程序崩溃定位

文章目录 1.gdb调试1.1 gcc 编译时不带-g1.2 gcc 编译时带-g 2.coredump栈回溯2.1 使能core文件生成2.1 借助core文件回溯堆栈 3.backtrace捕捉SIGSEGV信号4.其他工具5.总结 写程序时&#xff0c;难免碰到程序崩溃的现象&#xff0c;而如何排查这些内存崩溃问题&#xff0c;例如…

Pulsar Meetup 深圳 2024 会务介绍

“ Hi&#xff0c;各位热爱 Pulsar 的小伙伴们&#xff0c;Pulsar Meetup 深圳 2024 报名倒计时啦&#xff0c;快来报名。这里汇集了腾讯、华为和谙流科技等大量 Pulsar 大咖&#xff0c;干货多多&#xff0c;礼品多多&#xff0c;不容错过啊。 ” 活动介绍 图片 由 AscentStre…

巧用波卡生态优势,Mythical Games 引领 Web3 游戏新航向

Polkadot 对创新、安全和治理的承诺为 Mythical Games 提供了极大的发展价值。这个链上生态不仅将支持 Mythical Games 成长发展&#xff0c;还将帮助其他 Mythos 合作伙伴来壮大建设项目。 —— Mythical Games 创始人兼首席执行官 John Linden 近期 Web3 游戏行业又有新动向&…

【管理咨询宝藏86】MBB物流公司营销项目价值定位与目标客户规划报告

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏86】MBB物流公司营销项目价值定位与目标客户规划报告 【格式】PDF版本 【关键词】战略规划、MBB、麦肯锡 【核心观点】 - 价值定位是企业希望深…

HORROR SYSTEM

HORROR SYSTEM是一个创新的工具包,允许开发者在Unity3D中创建独特的原创恐怖游戏。 HORROR SYSTEM是一款强大而灵活的工具,旨在基于Unity3D引擎创建沉浸式第三人称恐怖游戏。 这项资产易于使用且直观,可以让任何经验水平的开发人员将他们的想法付诸实践,创造出高质量、充满…

飞行汽车飞行控制系统功能详解

飞行汽车是一种创新的交通工具&#xff0c;结合了汽车和飞机的特点。它可以在陆地上行驶&#xff0c;同时也具备在空中飞行的能力。飞行汽车的概念已经存在多年&#xff0c;并且近年来随着技术的进步和研发的深入&#xff0c;这种交通工具正在逐渐从概念走向现实。 飞行汽车的…

NLP方面知识

NLP方面知识 一 基础1.Tokenizer1.1 分词粒度&#xff1a;1.2 大模型的分词粒度1.3 各路语言模型中的tokenizer 2.Embedding layer2.1 理解Embedding矩阵 一 基础 1.Tokenizer tokenizer总体上做三件事情&#xff1a; 分词。tokenizer将字符串分为一些sub-word token string&…

学习Rust的第10天:枚举和模式匹配

今天我们来看看一个类似的概念 enums 。 Enums: We saw that in Rust, enums are data types that list possible values, giving a simple and type-safe mechanism to describe alternatives. We looked at how to create enums and use them to represent similar possibili…

MT8788智能模块简介_MTK联发科安卓核心板方案厂商

MT8788安卓核心板是一款具备超高性能和低功耗的4G全网通安卓智能模块。该模块采用联发科AIOT芯片平台&#xff0c;供货周期长。 MT8788核心板搭载了12nm制程的四个Cortex-A73处理器核心和四个Cortex-A53处理器核心&#xff0c;最高主频可达2.0GHz。板载内存容量可选为4GB64GB(也…

【Win】怎么下载m3u8视频\怎么通过F12开发人员工具获取视频地址\怎么下载完整的.ts格式视频

怎么下载m3u8视频&#xff1f;首先通过浏览器本地的开发人员工具&#xff0c;获取m3u8的地址&#xff0c;然后再通过第三方下载工具下载&#xff0c;此处以N_m3u8DL-CLI_v3.0.2为例 如下图的步骤&#xff0c;即可获取到视频的m3u8地址 打开N_m3u8DL-CLI_v3.0.2&#xff0c;粘贴…

生成式AI在B端产品的应用分析

AI产品发展到现在&#xff0c;消费端的产品应用还受到比较大的限制&#xff1b;但是在B端&#xff0c;已经有了不错的表现。作者总结了AI产品在B端的几款应用&#xff0c;一起来看看表现如何。 生成式AI在B端产品的应用分析© 由 ZAKER 提供 随着今年生成式AI应用的大范围…

ROS1快速入门学习笔记 - 04创建工作环境与功能包

一、定义 工作空间(workspace)是一个存放工程开发相关文件的文件夹。 src:代码空间&#xff08;Source Space&#xff09;build: 编辑空间&#xff08;Build Space&#xff09;devel:开发空间&#xff08;Development Space&#xff09;install:安装空间&#xff08;Install …

【网络安全】HTTP协议 — 基础

专栏文章索引&#xff1a;网络安全 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 目录 学习目标​ 一、万维网的诞生与发展​编辑 1.万维网的诞生与发展 2.HTTP协议诞生与发展 二、网络基础 1.TCP/IP分层传输 1&#xff09;TCP/IP协议 2&#xff09;封装与拆封 …