zoukankan      html  css  js  c++  java
  • (转)ASP.NET MVC4+EasyUI+EntityFrameWork权限管理系统——数据库的设计(一)

    原文地址:http://www.cnblogs.com/cmsdn/p/3371576.html

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

      先上图

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

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

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    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的权限

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

  • 相关阅读:
    <<C++ Primer>> 第三章 字符串, 向量和数组 术语表
    <<C++ Primer>> 第二章 变量和基本类型 术语表
    <<C++ Primer>> 第一章 开始 术语表
    PAT A1077 Kuchiguse (20)
    PAT A1035 Password (20)
    PAT A1005 Spell It Right (20)
    <<C++ Primer>> 术语表 (总) (待补充)
    PAT A1001 A+B Format (20 分)
    PAT B1048 数字加密 (20)
    Protocol
  • 原文地址:https://www.cnblogs.com/fcsh820/p/3371753.html
Copyright © 2011-2022 走看看