C# Enum 简易权限设计 使用FlagsAttribute属性
基本權限設計:
/// <summary>
/// 權限列舉
/// </summary>
[FlagsAttribute]
public enum Permissions
{
[Description("未設定")]
None = 0,
[Description("建立")]
Create = 1,
[Description("讀取")]
Read = 2,
[Description("更新")]
Update = 4,
[Description("刪除")]
Delete = 8,
[Description("所有功能")]
All = Create | Read | Update | Delete
}
技巧一:利用 2 的次方值,來作為列舉值以便日後做位元運算 ( & AND、 | OR、 ^ XOR)。
技巧二:現有權限中,加入新權限動作。(OR 運算)
Permissions permission = Permissions.None;
permission = permission | Permissions.Create;
MessageBox.Show(permission.ToString());
// Result: Create
技巧三:加入【FlagsAttribute】標籤
Permissions permission = Permissions.None;
permission = permission | Permissions.Create;
MessageBox.Show(permission.ToString());
// Result: Create ([FlagsAttribute]不影響結果)
permission = permission | Permissions.Read;
MessageBox.Show(permission.ToString());
// Result: 3 (未加入[FlagsAttribute])
// Result: Create, Read (加入[FlagsAttribute])
技巧四:現有權限中,移除某個權限動作。( XOR 與 AND 運算應用)
Permissions permission = Permissions.None;
permission = permission | Permissions.Create;
MessageBox.Show(permission.ToString());
// Result: Create
permission = permission | Permissions.Read;
permission = permission | Permissions.Update;
MessageBox.Show(permission.ToString());
// Result: Create, Read, Update
permission = (permission & (Permissions.All ^ Permissions.Read));
MessageBox.Show(permission.ToString());
// Result: Create, Update
技巧五:判斷現在權限中,是否擁有某個權限 (AND 運算)
Permissions permission = Permissions.None;
permission = permission | Permissions.Create;
MessageBox.Show(permission.ToString());
// Result: Create
permission = permission | Permissions.Read;
permission = permission | Permissions.Update;
MessageBox.Show(permission.ToString());
// Result: Create, Read, Update
permission = (permission & (Permissions.All ^ Permissions.Read));
MessageBox.Show(permission.ToString());
// Result: Create, Update
bool IsCreatable = false;
if((permission & Permissions.Create) == Permissions.Create)
{
IsCreatable = true;
}
else
{
IsCreatable = false;
}
MessageBox.Show(IsCreatable.ToString());
// Result: True
簡易權限類別設計:
1: /// <summary>
2: /// 我的權限
3: /// </summary>
4: public class MyPermission
5: {
6: private Permissions _permission;
7: private bool _isCreatable = false;
8: private bool _isReadable = false;
9: private bool _isUpdatable = false;
10: private bool _isDeletable = false;
11:
12: /// <summary>
13: /// 權限
14: /// </summary>
15: public Permissions Permission
16: {
17: get { return _permission; }
18: set
19: {
20: _permission = value;
21:
22: IsCreatable = ((value & Permissions.Create) == Permissions.Create) ? true : false;
23: IsReadable = ((value & Permissions.Read) == Permissions.Read) ? true : false;
24: IsUpdatable = ((value & Permissions.Update) == Permissions.Update) ? true : false;
25: IsDeletable = ((value & Permissions.Delete) == Permissions.Delete) ? true : false;
26: }
27: }
28:
29: /// <summary>
30: /// 是否可建立?
31: /// </summary>
32: public bool IsCreatable
33: {
34: get { return _isCreatable; }
35: set
36: {
37: _isCreatable = value;
38:
39: if (value)
40: {
41: AddPermissionFlag(Permissions.Create);
42: }
43: else
44: {
45: RemovePermissionFlag(Permissions.Create);
46: }
47: }
48: }
49:
50: /// <summary>
51: /// 是否可讀?
52: /// </summary>
53: public bool IsReadable
54: {
55: get { return _isReadable; }
56: set
57: {
58: _isReadable = value;
59:
60: if (value)
61: {
62: AddPermissionFlag(Permissions.Read);
63: }
64: else
65: {
66: RemovePermissionFlag(Permissions.Read);
67: }
68: }
69: }
70:
71: /// <summary>
72: /// 是否可新增?
73: /// </summary>
74: public bool IsUpdatable
75: {
76: get { return _isUpdatable; }
77: set
78: {
79: _isUpdatable = value;
80:
81: if (value)
82: {
83: AddPermissionFlag(Permissions.Update);
84: }
85: else
86: {
87: RemovePermissionFlag(Permissions.Update);
88: }
89: }
90: }
91:
92: /// <summary>
93: /// 是否可刪除?
94: /// </summary>
95: public bool IsDeletable
96: {
97: get { return _isDeletable; }
98: set
99: {
100: _isDeletable = value;
101:
102: if (value)
103: {
104: AddPermissionFlag(Permissions.Delete);
105: }
106: else
107: {
108: RemovePermissionFlag(Permissions.Delete);
109: }
110: }
111: }
112:
113: /// <summary>
114: /// 現有權限中增加某個權限
115: /// </summary>
116: /// <param name="addFlag">某個權限</param>
117: public void AddPermissionFlag (Permissions addFlag)
118: {
119: _permission = _permission | addFlag;
120: }
121:
122: /// <summary>
123: /// 現有權限中移除某個權限
124: /// </summary>
125: /// <param name="removeFlag">某權限</param>
126: public void RemovePermissionFlag (Permissions removeFlag)
127: {
128: _permission = (_permission & (Permissions.All ^ removeFlag));
129: }
130: }
簡易權限類別使用:
1: MyPermission mp = new MyPermission();
2:
3: mp.Permission = Permissions.Create;
4: // Create
5: MessageBox.Show(mp.Permission.ToString());
6:
7: mp.AddPermissionFlag(Permissions.Read);
8: // Create, Read
9: MessageBox.Show(mp.Permission.ToString());
10:
11: mp.IsUpdatable = true;
12: // Create, Read, Update
13: MessageBox.Show(mp.Permission.ToString());
14:
15: mp.IsDeletable = true;
16: // All
17: MessageBox.Show(mp.Permission.ToString());
18:
19: mp.RemovePermissionFlag(Permissions.Delete);
20: // Create, Read, Update
21: MessageBox.Show(mp.Permission.ToString());
22:
23: mp.IsUpdatable = false;
24: // Create, Read
25: MessageBox.Show(mp.Permission.ToString());
from:http://www.dotblogs.com.tw/chhuang/archive/2008/04/26/3514.aspx
C# Enum 简易权限设计 使用FlagsAttribute属性的更多相关文章
- C# 枚举 Flag属性(权限设计)
枚举是一个可以列举元素的对象,常用于权限,日期,类型等. 如果对一个值可以包含多个,那么可以使用枚举,加上Flags [Flag] public enum Permission { create=, ...
- Angularjs,WebAPI 搭建一个简易权限管理系统
Angularjs,WebAPI 搭建一个简易权限管理系统 Angularjs名词与概念(一) 1. 目录 前言 Angularjs名词与概念 权限系统原型 权限系统业务 数据库设计和实现 Web ...
- AppBox升级进行时 - 扁平化的权限设计
AppBox 是基于 FineUI 的通用权限管理框架,包括用户管理.职称管理.部门管理.角色管理.角色权限管理等模块. AppBox v2.0中的权限实现 AppBox v2.0中权限管理中涉及三个 ...
- [后端人员耍前端系列]AngularJs篇:使用AngularJs打造一个简易权限系统
一.引言 上一篇博文已经向大家介绍了AngularJS核心的一些知识点,在这篇博文将介绍如何把AngularJs应用到实际项目中.本篇博文将使用AngularJS来打造一个简易的权限管理系统.下面不多 ...
- AngularJs打造一个简易权限系统
AngularJs打造一个简易权限系统 一.引言 上一篇博文已经向大家介绍了AngularJS核心的一些知识点,在这篇博文将介绍如何把AngularJs应用到实际项目中.本篇博文将使用AngularJ ...
- JAVA 数据权限设计
数据权限设计 前言 在各种系统中.要保证数据对象的安全性以及易操作性,使企业的各业务部门.职能部门可以方便并且高效的协同工作,那么一个好的数据权限管理设计就成为一个关键的问题.尽管企业中各个单元的工作 ...
- 数据权限设计——基于EntityFramework的数据权限设计方案:一种设计思路
前言:“我们有一个订单列表,希望能够根据当前登陆的不同用户看到不同类型的订单数据”.“我们希望不同的用户能看到不同时间段的扫描报表数据”.“我们系统需要不同用户查看不同的生产报表列”.诸如此类,最近经 ...
- ASP.NET -- WebForm -- Cookie的使用 应用程序权限设计 权限设计文章汇总 asp.net后台管理系统-登陆模块-是否自动登陆 C# 读写文件摘要
ASP.NET -- WebForm -- Cookie的使用 ASP.NET -- WebForm -- Cookie的使用 Cookie是存在浏览器内存或磁盘上. 1. Test3.aspx文件 ...
- Java工作流引擎-集团模式下的权限 设计与实现
关键字 工作流开发框架权限设计.用户组.岗位.集团模式应用. java工作流程引擎, .net 工作流引擎,工作流开发框架 相关的表结构 -- 相关组织-表结构. SELECT No,Name,Par ...
随机推荐
- Python 集合操作
1.集合操作 集合是一个无序的,不重复的数据组合, 他的主要作业如下. 1.去重,把一个列表变成集合,就自动去重了 2.关系测试,测试两组数据之前的交集.差集.并集等关系 list_1 = [1,4, ...
- ADO.NET 新特性之SqlBulkCopy
在.Net1.1中无论是对于批量插入整个DataTable中的所有数据到数据库中,还是进行不同数据源之间的迁移,都不是很方便.而 在.Net2.0中,SQLClient命名空间下增加了几个新类帮助我们 ...
- UICollectionView介绍
文章原出处未知,如有朋友知道,请告诉我,我会补上. 1.1. Collection View 全家福: UICollectionView, UITableView, NSCollectionView ...
- InnerJoin分页导致的数据重复问题排查
2016年8月9号美好的七夕的早上,我精神抖擞地来到公司.一会之后,客服宅宅MM微信我,说一个VIP大店铺订单导出报表中一个订单有重复行.于是,我赶紧开始查探问题所在.经过一天的反复仔细追查(当然还包 ...
- Dynamics AX 2012 R2 AIF自定义服务中的事务回滚Bug
Reinhard在一个Customer Service里的一个Method中,发现一个Transcation RollBack Bug.先看该Method的代码: [SysEntryPointAttr ...
- 如何利用php array_multisort函数 对数据库排序
数据库中有4个字段分别是id,volume,edition,name. 要求对查询结果按照volume+edition从大到小排序.下面将一下array_multisort函数array_multis ...
- UBUNTU下Y86模拟器的安装和使用
UBUNTU下Y86模拟器的安装和使用 由于上周在虚拟机中安装Y86模拟器中出现了一些问题并且没得到解决,所以上周实验是在实验楼上做的,这几天练习了UBUNTU下Y86模拟器的安装和使用. 参考博客: ...
- 是否支持css3
/** * Function to check css3 support * @param {String} declaration name * @return {Boolean} */ funct ...
- Java菜鸟学习 Script 脚本语言(简介)
script 可以写在head里 也可以写在body里 还可以写在 /html后面 script 也是成对出现的 <script></script> 他有三种常见的对话框 1 ...
- 【转】对硬盘进行分区时,GPT和MBR区别。
在Windows 8或8.1中设置新磁盘时,系统会询问你是想要使用MBR还是GPT分区.GPT是一种新的标准,并在逐渐取代MBR. GPT带来了很多新特性,但MBR仍然拥有最好的兼容性.GPT并不是W ...