ASP.NET MVC5+三层架构+AutoFac搭建简单权限管理系统

一. 前言

  该系统为入门级别的权限管理系统,仅适用于小型项目。

二. 简单权限系统数据库设计

  对于小型项目,而且角色相对固定且角色具体权限长时间内不会修改的系统,管理员不需要为角色配置具体访问权限时,数据库可以只使用蓝色方框中的三张表即可(这样并不灵活)。若需要开放权限配置功能,则至少需要5张表(PowerInfo包括菜单目录和具体方法访问权限,考虑到入门阶段,本项目的PowerInfo只维护菜单目录)。
  注意:在这里暂时不讨论Asp.Net Identity.

在这里插入图片描述

三. MVC5三层架构搭建

  新建一个空的MVC项目,不需要任何模板。
在这里插入图片描述
  搭建项目架构如图所示:(在这里并没有使用数据仓储,小型项目没必要,降低开发效率)
在这里插入图片描述
  引用关系为

  MVC引用 : IService、Service、DataEntity、ModelEntity、Utilty
  IService引用 :DataEntity、ModelEntity
  Service引用 : DataEntity、ModelEntity、Utilty

四. 使用CodeFirst添加数据库迁移

  首先添加EF 的nuget包
在这里插入图片描述
  就目前来说,实际开发中一般是先设计数据库,或者设计数据库的工作由DBA完成,然后使用基于数据库的CodeFirst即可。为了跟风,还是勉为其难的用一下纯CodeFirst(看个人习惯)。

  以下为codefirst的一些简单命令:
  1、启用迁移 Enable-Migrations
  2、为挂起的Model变化添加迁移脚本 Add-Migration 名字
  3、将挂起的迁移更新到数据库 Update-Database

  使用EF应该注意的问题:应保证EF对象线程内唯一或者作用域内唯一
  解决方案一:把EF对象存到HttpContext对象中,实现EF对象线程内唯一
在这里插入图片描述  解决方案二:使用IOC容器实现作用域内唯一

五. 使用AutoFac实现依赖注入

  首先添加NuGet程序包
在这里插入图片描述
  在Global文件注册AutoFac的配置类,注入方式任选,这里使用的是属性注入(点击进入官方文档
  如果使用仓储模式可以使用扫描程序集的方式进行AutoFac模块化注册。
在这里插入图片描述

六. 实现系统登录

  登录成功后,获取用户所有的角色ID,并用逗号分隔开来,形成新字符串(例如“R1001,R1003”),存到Session中备用。
在这里插入图片描述

七. Filter实现权限过滤

  写一个继承ActionFilterAttribute的特性类,重写行为前过滤器。实现Seesion登录权限校验和基于角色权限的校验功能。
在这里插入图片描述
  把需要权限校验的方法或控制器上标记特性。
在这里插入图片描述
在这里插入图片描述

八. Filter实现异常处理

  写一个继承HandleErrorAttribute的特性类,重写异常处理过滤器(逻辑可以自己设计,比如把报错信息写入txt或者数据库,然后返回错误页面或者直接返回错误信息,可以结合Log4net组件,自由发挥吧),最后全局注册一下这个异常处理过滤器即可。

九.主页菜单目录动态生成

  根据登录用户的角色ID字符串(例如“R1001,R1003”),R_RoleInfo_PowerInfo与PowerInfo连表并查出对应的菜单目录,进行去重处理,在UI页面动态生成即可。

十.其他功能补充

  接下来还需要做用户信息增删查改、为用户配置角色。一个简单版的完整的权限功能就算完成。

原创文章 7 获赞 0 访问量 383

猜你喜欢

转载自blog.csdn.net/qq_33101689/article/details/105636990