快一年没写博客了,这段时间感觉好迷茫,写点博客,记录一下自己的成长过程,希望对大家也有帮助

  先上图

  一个用户可以有多个角色,一个用户可以属于多个部门,这些都可以控制到权限,有时特殊要求,同样的部门和角色不一定有同样的权限(虽然可以定义多个角色来实现,但是如果这种情况多了就有点麻烦了),所以还弄了个基于用户的权限,这样就可以很灵活的控制了。

  每个模块的包含那些可控制的权限,用一个int类型字段控制,下边用一个枚举位标示出了系统所有的可能的权限(根据实际情况)

  

using System;

namespace Mydream.Permission.Common
{
[Flags]
public enum Authority : int
{
/// <summary>
/// 浏览权限
/// </summary>
Index = 1,
/// <summary>
/// 添加权限
/// </summary>
Add = 2,
/// <summary>
/// 编辑权限
/// </summary>
Edit = 4,
/// <summary>
/// 删除权限
/// </summary>
Delete = 8,
/// <summary>
/// 搜索权限
/// </summary>
Search = 16,
/// <summary>
/// 审核权限
/// </summary>
Verify = 32,
/// <summary>
/// 移动权限
/// </summary>
Move = 64,
/// <summary>
/// 打印权限
/// </summary>
Print = 128,
/// <summary>
/// 下载权限
/// </summary>
Download = 256,
/// <summary>
/// 备份权限
/// </summary>
Backup = 512,
/// <summary>
/// 授权权限
/// </summary>
Grant = 1024,
/// <summary>
/// 查看详细权限
/// </summary>
View = 2048,
/// <summary>
/// 导出权限
/// </summary>
Export = 4096
}
}

这些枚举值全部用的2的次幂,之所有这样赋值,是为了用2进制来控制权限

比如某个模块(模块A)有浏览、添加、编辑、删除、打印的权限,那么这个模块的int值=Index|Add|Edit|Delete|Print

00000001(Index=2^0=1)

00000010 (Add=2^1=2)

00000011 3

00000100(Edit=2^2=4)

00000111 7

00001000(Delete=2^3=8)

00001111 15

 1000000 (Print=2^7=128)

10001111 143

   最后的值其实就是1+2+4+8+128=143 所以这个模块对应的权重就是143(这个只是说明这个模块包含哪些功能)

  如果一用户属于角色A,角色A包含模块A中的浏览和添加权限(1+4=5),那么这个角色A 就对应了  (角色A的ID 模块A的ID 权重=5)

  我们的Action的命名按照枚举那样命名,然后每次操作的时候用这个权限INT值,然后if(INT值&Action命名的枚举==Action命名的枚举)如果为True说明有执行这个Action的权限

  由于权限管理系统还在业余学习研究中,很多还没有实现,上面主要讲解了数据库的设计,后边的实现会慢慢呈现,最近都很忙,也没怎么写这个业余学习的例子了,后续有更新会慢慢放上来,写得不好请包涵,如有好的意见请赐教,谢谢!

ASP.NET MVC4+EasyUI+EntityFrameWork5权限管理系统——数据库的设计(一)的更多相关文章

  1. (转)ASP.NET MVC4+EasyUI+EntityFrameWork权限管理系统——数据库的设计(一)

    原文地址:http://www.cnblogs.com/cmsdn/p/3371576.html 快一年没写博客了,这段时间感觉好迷茫,写点博客,记录一下自己的成长过程,希望对大家也有帮助 先上图 一 ...

  2. ASP.NET MVC4+EasyUI+EntityFrameWork5权限管理系统——菜单模块的实现(二)

    ASP.NET MVC4+EasyUI+EntityFrameWork5权限管理系统——数据库的设计(一) 菜单和模块是在同一个表中,采用的是树形结构,模块菜单表结构如下代码: USE [Permis ...

  3. Oracle+FluentData+MVC4+EasyUI开发权限管理系统之开篇

    在园子里有很多EF+MVC+EasyUI的框架实在是太多了,经过在一段时间的学习高手写的思路,但是都是针对Sql数据的,但是今年我当上研发组组长的第一个任务就是编写一个通用平台框架,一刚开始想把学习过 ...

  4. asp.net mvc +easyui 实现权限管理(二)

    一写完后,好久没有继续写了.最近公司又在重新开发权限系统了,但是由于我人微言轻,无法阻止他们设计一个太监版的权限系统.想想确实是官大一级压死人啊, 没办法我只好不参与了 让他们去折腾. 我就大概说一下 ...

  5. asp.net core 身份认证/权限管理系统简介及简单案例

    如今的网站大多数都离不开账号注册及用户管理,而这些功能就是通常说的身份验证.这些常见功能微软都为我们做了封装,我们只要利用.net core提供的一些工具就可以很方便的搭建适用于大部分应用的权限管理系 ...

  6. ASP.NET MVC 通用角色权限管理系统

    RightControl 介绍 .NET 通用后台角色权限管理系统,已完成.项目地址:http://106.14.77.184/Admin/Login 码云地址:https://gitee.com/L ...

  7. Asp.net MVC + AngularJS 统一权限管理系统(一)

    背景: 之前公司内部做了不少系统,但是权限管理都是分开的:一直都想能够有一套统一管理的权限管理系统:有的时间都是一直在计划,随着时间的流逝,计划始终没有实现,也随着项目的增多而这权限管理也变得版本多样 ...

  8. [置顶] EASYUI+MVC4+VS2010通用权限管理系统开发

    通用权限案例平台在经过几年的实际项目使用,并取得了不错的用户好评.在平台开发完成后,特抽空总结一下平台知识,请各位在以后的时间里,关注博客的更新. 1.EASYUI+MVC4通用权限管理平台--前言 ...

  9. 快速开发之代码生成器(asp.net mvc4 + easyui + knockoutjs)

    一.前言 作为一个码农这么多年,一直在想怎么提高我们的编码效率,关于如何提高编码效率,我自己的几点体会 1.清晰的项目结构,要编写代码的地方集中 2.实现相同功能的代码量少并且清晰易懂 3.重复或有规 ...

随机推荐

  1. OrderSys---Spring 计划(第一天)

    Sprint 计划会议: 目标: 1.了解需求分析书的内容 2.划分OrderSys的功能模块 3.开始制作原型 Sprint 3 Backlog细化: ID Name Est How to demo ...

  2. listagg wm_concat 行转列

    一. 这个写法和wm_concat相似,listagg(day,',')要把哪一列转换为同一行within group (order by day)同一行如何排序 with temp as ( ' d ...

  3. 第一次C++作业

    电梯调度问题,PTA作业 ... 电梯调度问题 [github]https://github.com/zhanglingxin/elevator-scheduling 在本次代码中我第一次使用C++的 ...

  4. 严重: Failed to destroy end point associated with ProtocolHandler ["http-nio-8080"] java.lang.NullPointer

    刚接触servlet类,按照课本的方法使用eclipse新建了一个servlet类. 新建完成后,在web.xml里面进行注册 这时候就会报错了. 五月 07, 2016 11:23:28 上午 or ...

  5. java锁有哪些类(转)

    转载来源:http://www.cnblogs.com/lxmyhappy/p/7380073.html 1.Java都有哪些锁? 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/ ...

  6. Redis 列表(List)

    Redis列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素到列表的头部(左边)或者尾部(右边),一个列表最多可以包含2^32-1个元素(4294967295,每个列表超过40亿个元素). ...

  7. TCP系列49—拥塞控制—12、DSACK下的拥塞撤销

    一.概述 DSACK下的虚假重传的检测我们之前重传部分的文章已经介绍过了,这里简单说一下拥塞控制部分的实现. linux内部会维护一个undo_retrans状态变量,其值为已经重传的次数减掉被DSA ...

  8. 6/2 sprint2 看板和燃尽图的更新

  9. 【Leetcode】445. Add Two Numbers II

    You are given two non-empty linked lists representing two non-negative integers. The most significan ...

  10. C#获取当前路径的方法如下

    1. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName -获取模块的完整路径. 2. System.Environm ...