ASP.NET MVC+EF框架+EasyUI实现权限管系列

  (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装   

      (5):前台Jquery easyUI实现  (6):EF上下文实例管理   (7):DBSession的封装   (8):DBSession线程内唯一  

      (9):TT摸版的学习   (10):VSS源代码管理   (11):验证码实现和底层修改  (12):实现用户异步登录和T4模板   

      (13):权限设计  (14):主框架搭建  (15):权限数据库模型和用户登录详细错误    (16):用户注册的各种验证 

      (17):注册用户功能的细节处理   (18):过滤器的使用和批量删除数据(伪删除和直接删除) 

     (19):用户信息的修改和浏览   (20):多条件模糊查询和回收站还原的实现   (21):用户角色权限基本的实现说明

(22):为用户设置角色   (23):设置角色遗留问题和EasyUI Tabs使用 

  前言:已经有很长的一段时间没有写博客了,主要是这段时间生活有动荡了一下,所以一直没有顾得过来写,所以对那些关注我这个系列的博友们说声对不起,本来打算中途放弃的,因为后面的东西实在不好写,重点是说了很多,但是博友们看不明白,在好几个类库以及控制器和实体之间转换导致了这样的结果,但是自己一想干一件事情我们就一定要干完,所以我会坚持写完这个系列的,这几天抽空出来,所以继续我们权限系列的步伐,希望大家能够支持我,谢谢,如果大家想去下载次项目练习版本的话,可以去百度搜索:《ASP.NET MVC+EF框架+EasyUI实现权限管理源码》下载学习,此版本只适用于学习,和现在写的项目的版本基本不一样,希望大家能够对比学习。

  那么今天我们就开始讲述权限组的实现和设计吧。

1. 为什么要有权限组

  (1)通过前面的博客我们已经基本上完成了项目的用户,角色和权限的功能,那么我们现在才出现了权限组,那么我们的权限组是用来干什么的呢?这里我大致说一下,首先看如图所示的菜单导航:

    

  (2)如上图所示,我们的菜单导航是静态写死在HTML中的,那么这样的话很不利于我们项目的维护,当我们需要添加一个菜单导航的话,我们只有去HTML中更改了,鉴于上面的需求,所以我们需要将其变化成动态并且存放在数据库中,那么这时候我们就创建了权限组的数据表来存放这些数据。

2.权限组和权限的关系描述

  (1)首先菜单导航应该跟用户关联到一块,这是为什么呢?因为有的用户可能有后台权限管理,网站基本管理栏目,而有的用户可能没有网站基本管理栏目,而超级管理员应该含有所有的栏目,那么这时候我们就想我们的菜单导航的栏目(指的是后台权限管理,网站基本管理,网站开发支持三个栏目分组)怎么跟用户和权限去关联呢?因为菜单导航也是跟权限有关系的,那么这时候我们就想我们的菜单组(权限组)怎么去设计。

  (2)根据上面的描述我们知道了我们菜单导航中的分组以及子类都要去存放到数据库中,那么我们怎么设计我们的菜单导航跟权限联系到一块呢?

  (3)我们知道我们菜单导航(菜单组)里面的数据都对应的有权限,所以我们就要想那么我们的菜单组和菜单项怎么在模型中设计出来,当我们用户登录到系统的时候便可以直接拿到菜单组合菜单项的数据展示在菜单导航里面。

3.菜单项和菜单组的实现

  (1)可能这里我写菜单项和菜单组的话部分人会晕,我这里解释一下,菜单项就是菜单组下面的子节点,比如:菜单组是后台权限管理,而菜单项是后台权限管理下面的子节点。

  (2)这样的话我们下来看我们的这个权限的模型如图所示:

    

  因为我们在BasePermission表中是对菜单的总体操作,但是我们的菜单又分为菜单组和菜单项,所以这样的话我们还需要给这个模型中添加一个标识,这个标识的作用就是区分到底是菜单组还是菜单项,用(1,0)标识即可

  (3)这样我们就设计完了菜单项,那么下面我们主要还是讨论如何建立菜单项

4.菜单项的实现

  (1)那么根据我们上述的描述的话,我们在这里需要建立一个菜单项管理的数据库,所以我们主要分析一下我们该如何建立这个菜单项的数据库和这个数据库和其它的之间的关系。首先我直接上Edmx模型说明这个数据库和关系,如图所示:

    

  (2)这里我首先要陈述两点,那就是菜单组和菜单项是多对多的关系,从我的模型中可以看出了又一个中间表。

  (3)菜单组和用户肯定也是有关系的,那么我们也可以想到用户和菜单组肯定也是多对多的关系。

  (4)那么菜单组和角色之间肯定也是有关系,我们可以想到也是多对多的关系,那么到这里我们的关系就建立完毕了,整个菜单组关联了所有的项目

  (5)如果大家看这个的话我觉得应该看得很模糊,那么我将数据库的创建的文档放在了CSDN上面,大家可以去下载:下载地址是:

    http://download.csdn.net/detail/hanyinglong/5862727

5.菜单组最终完成

  (1)到这里我们的数据库之类的就都已经建立完毕了,至于怎么建立的,我觉得用过edmx模型的基本都知道,那么这个部分我们就算是完成了,下面展示我们这部分的内容,其实和前面的基本一样,如图所示:

  (2)那么下篇博客我说一下如何对这些前面所加入的验证的东西在项目登录的时候验证用户是不是没有此权限呢。

  (3)本项目之前的源码下载地址如下:

    

  (4)至于如何在他们的中间建立关系,大家去看我的上上篇博客是如何给他们建立关系的,我们后续的几个关系我也就不说了,下篇博客可能要到下周才能写,我将些我们如何判断用户登录进来显示的内容。

(5)后续思路的实现(这个系列就终结了,希望大家理解):

    因为当时有事,所以这个系列就搁置了,后来时间长了就懒得去写了,所以这里给大家说一下后面的思路,现在前面所以的铺垫都已经做完了,后面如何查询出该有的页面则很简单了。
      (1):首先写一个过滤器,当用户手动输入网址的时候进行判断这个网址是否该用户允许访问,不允许则直接跳转黄页,允许则直接跳转到操作页面
      (2):然后TreeNode的实现
         第一步:根据登录的用户查询到角色对应的权限(权限含有页面)
         第二步:根据登录的用户查询到对应的权限(权限含有页面)
         第三步:将第一步和第二步进行Union ALL去除重复则可以直接拿到该用户需要看到的页面
         第四步:使用递归TreeNode进行循环显示即可。递归的用户如果大家不会的话去百度一下一大把~~~~

  (6)大部分同学问我说我输入地址之后如何判断用户是否登录以及用户是否有访问该地址的权限,下面我将大纲代码贴出来,大家看看,代码如下:

       //读取当前用户的Session信息
protected ExtendUserInfo UserInfo
{
get
{ //从缓存中获取登录的信息
return ContextHelper.GetCurrentUser();
}
} protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
//拿到Session信息
// UserInfo = Session["UserInfo"] as ExtendUserInfo;
if (UserInfo == null)
{
Response.Redirect("/Login/Index");
}
//判断路劲某个人是否能够访问:构造查询判断登录的用户能够访问此时刷新的路劲
}

6.此项目中封装的使用T_SQL语句和存储过程的方法

        /// <summary>
/// 执行SQL对象返回受影响的行数
/// </summary>
/// <param name="strSql">SQL语句</param>
/// <param name="parameters">参数</param>
/// <returns></returns>
public int ExcuteSql(string strSql, object[] parameters)
{
return EFContextFactory.GetCurrentDbContext().Database.ExecuteSqlCommand(strSql, parameters);
} /// <summary>
/// 执行SQL对象,返回查询到的实体集合
/// </summary>
/// <typeparam name="T">返回的实体集合</typeparam>
/// <param name="strSql">SQL语句</param>
/// <param name="parameters">传递的参数</param>
/// <returns></returns>
public IQueryable<T> ExecuteSql<T>(string strSql, object[] parameters)
{
return
EFContextFactory.GetCurrentDbContext().Database.SqlQuery<T>(strSql, parameters).AsQueryable();
} /// <summary>
/// 执行SQL对象,返回查询到的实体集合
/// </summary>
/// <typeparam name="T">返回的实体集合</typeparam>
/// <param name="strSql">SQL语句</param>
/// <returns></returns>
public IQueryable<T> ExecuteSql<T>(string strSql)
{
return
EFContextFactory.GetCurrentDbContext().Database.SqlQuery<T>(strSql).AsQueryable();
} /// <summary>
/// 执行存储过程,返回查询到的实体集合
/// </summary>
/// <typeparam name="T">返回的实体集合</typeparam>
/// <param name="procSql">存储过程</param>
/// <param name="parameters">参数</param>
/// <returns></returns>
public IQueryable<T> ExexuteProc<T>(string procSql, object[] parameters)
{
return EFContextFactory.GetCurrentDbContext().Database.SqlQuery<T>(procSql, parameters).AsQueryable();
} /// <summary>
/// 执行存储过程,返回查询到的实体集合
/// </summary>
/// <typeparam name="T">返回的实体集合</typeparam>
/// <param name="procSql">存储过程</param>
/// <returns></returns>
public IQueryable<T> ExexuteProc<T>(string procSql)
{
return EFContextFactory.GetCurrentDbContext().Database.SqlQuery<T>(procSql).AsQueryable();
} /// <summary>
/// 执行SQL对象返回受影响的行数
/// </summary>
/// <param name="procSql">SQL语句</param>
/// <param name="parameters">参数</param>
/// <returns></returns>
public int ExcuteProc(string procSql, object[] parameters)
{
return EFContextFactory.GetCurrentDbContext().Database.ExecuteSqlCommand(procSql, parameters);
}

7.源码下载

   (1):完整源码下载

  Kencery返回本系列开篇

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(24)-权限组的设计和实现(附源码)(终结)的更多相关文章

  1. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

  2. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(22)-为用户设置角色

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

  3. ASP.NET MVC+EF框架+EasyUI实现权限管理系列

    http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开 ...

  4. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明     ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框 ...

  5. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架 ...

  6. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(19)-用户信息的修改和浏览

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(19)-用户信息的修改和浏览  ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    ...

  7. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除)

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除) ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   ...

  8. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证)

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证) ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框 ...

  9. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...

随机推荐

  1. Android开发学习之路-提升用户体验小技巧

    记得之前看谷歌的一个视频提到这个用户体验的问题,今天想起来了就写了个Demo来记录下. 当一个事件发生之后,用户需要一段时间才能知道结果,那么这段时间究竟应该让用户干什么?这个问题很常见,比如我们的软 ...

  2. GitFlow

    git工作流 始终保持有master分支(只要有目录,git就自动创建)和develop分支(手动创建) 一.主分支Master二.开发分支Develop三.临时性分支(最后发布要删除的)* 功能(f ...

  3. py2exe使用中遇到的几个问题

    问题: 在使用py2exe对所写的python脚本打包成.exe可执行程序时,遇到两个问题: 问题1: RuntimeError: maximum recursion depth exceeded w ...

  4. Neutron 功能概述 - 每天5分钟玩转 OpenStack(65)

    从今天开始,我们将学习 OpenStack 的 Networking Service,Neutron.Neutron 的难度会比前面所有模块都大一些,内容也多一些.为了帮助大家更好的掌握 Neutor ...

  5. ASP.NET MVC之视图生成URL(二)

    前言 上一节我们讲述了MVC中从控制器到视图传递数据的四种方式,想必大家早已掌握了,那我们继续往下走. 话题 在MVC的Web应用程序中,我们经常会出现这样的操作,从一个视图跳转到另外一个视图,大部分 ...

  6. JavaScript使用构造函数获取变量的类型名

    在JavaScript中,如何准确获取变量的类型名是一个经常使用的问题. 但是常常不能获取到变量的精确名称,或者必须使用jQuery 中的方法,这里 我通过 typeof ,jQuery.type 和 ...

  7. 关于 android 的 view.getLeft(), getRight(), getTop(), getBottom() 的一些疑惑(坑)解答

    (原创) 今天在做下滑刷新的时候碰到 view 的四个 get 函数有点特别,具体遇到的问题如下,经反复测试和查找资料,填坑如下: 1,为什么我有时候在使用getLeft(), getRight(), ...

  8. 云计算之路-阿里云上:从ASP.NET线程角度对“黑色30秒”问题的全新分析

    在这篇博文中,我们抛开对阿里云的怀疑,完全从ASP.NET的角度进行分析,看能不能找到针对问题现象的更合理的解释. “黑色30秒”问题现象的主要特征是:排队的请求(Requests Queued)突增 ...

  9. Thymeleaf 模板的使用

    Thymeleaf是现代化服务器端的Java模板引擎,不同与JSP和FreeMarker,Thymeleaf的语法更加接近HTML,并且也有不错的扩展性.详细资料可以浏览官网.本文主要介绍Thymel ...

  10. Oracle段收缩功能

    1.了解段收缩 2.自动执行Segment Advisor 3.收缩段 1. 了解段收缩 应用场景:如果对一张表频繁执行插入.更新和删除操作,时间长了可能会出现大量碎片,Oracle针对这种场景推出段 ...