• (转)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的权限

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

  • 相关阅读:
    417 Pacific Atlantic Water Flow 太平洋大西洋水流
    416 Partition Equal Subset Sum 分割相同子集和
    415 Add Strings 字符串相加
    414 Third Maximum Number 第三大的数
    413 Arithmetic Slices 等差数列划分
    412 Fizz Buzz
    410 Split Array Largest Sum 分割数组的最大值
    409 Longest Palindrome 最长回文串
    day22 collection 模块 (顺便对比queue也学习了一下队列)
    day21 计算器作业
  • 原文地址:https://www.cnblogs.com/fcsh820/p/3371753.html
Copyright © 2020-2023  润新知