c# 权限设计

 

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

  每个模块的包含那些可控制的权限,用一个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权限管理系统——菜单模块的实现(二)

https://www.cnblogs.com/cmsdn/p/3433995.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值