- 浏览: 2542899 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
jsntghf:
peio 写道这个怎么运行?Ruby On Rails的环境搭 ...
多文件上传之uploadify -
peio:
这个怎么运行?
多文件上传之uploadify -
往事如烟1:
我的项目是自己init了一个原始的project,之后将ver ...
React Native热部署之CodePush -
jsntghf:
往事如烟1 写道我按照你的说明进行,发现app退出之后,在进入 ...
React Native热部署之CodePush -
往事如烟1:
我按照你的说明进行,发现app退出之后,在进入不正确,请问是什 ...
React Native热部署之CodePush
大部分系统都有权限系统,一般来说,它能管控人员对某个页面的访问,对某些字段、控件可见或者不可见,对数据是否可删除、可添加、可新增等等。大部分人都把权限作为一个子系统独立出来。但是这里我不是想设计一个权限管理系统,网上的设计方案太多了,可以说每个开发人员都有自己的开发权限管理系统的想法和思路。
在这篇文章中,我先用简单的C#代码模仿一个用户的权限,再使用sql去模拟。这是一种很简单,很直观的方式去判定用户的权限。
好吧,先从最简单的开始,定义一个用户(User)类,如下:
class User { bool CanDelete; bool CanRead; bool CanWrite; bool CanModify; bool CanCreate; }
这里设计5个属性来管控用户的权限。我发现这样虽然很直观,但是不宜扩张。我们将权限独立出来,再看下面的代码:
enum PermissionTypes : int { None = 0, Read = 1, Write = 2, Modify = 4, Delete = 8, Create = 16, All = Read | Write | Modify | Delete | Create } class User { public PermissionTypes Permissions = PermissionTypes.None; }
我们先试用一下,你就能感觉到神奇之处:
//创建一个用户 User admin = new User(); admin.Permissions = PermissionTypes.Read | PermissionTypes.Write | PermissionTypes.Delete; //验证权限 bool canRead = ((PermissionTypes.Read & admin.Permissions) == PermissionTypes.Read); bool canWrite = ((PermissionTypes.Write & admin.Permissions) == PermissionTypes.Write); bool canCreate = ((PermissionTypes.Create & admin.Permissions) == PermissionTypes.Create); //查看结果 Console.WriteLine(canRead); //true Console.WriteLine(canWrite); //true Console.WriteLine(canCreate); //false
利用了'|'和'&'两个操作,但是这样看起来很是别扭,初始化权限和验证权限用了一长串'|'和'&'运算的代码,很不直观。我在System.Enum中扩展了一些方法供调用,代码如下:
//是否存在权限 public static bool Has<T>(this System.Enum type, T value) { try { return (((int)(object)type & (int)(object)value) == (int)(object)value); } catch { return false; } } //判断权限 public static bool Is<T>(this System.Enum type, T value) { try { return (int)(object)type == (int)(object)value; } catch { return false; } } //添加权限 public static T Add<T>(this System.Enum type, T value) { try { return (T)(object)(((int)(object)type | (int)(object)value)); } catch (Exception ex) { throw new ArgumentException( string.Format( "不能添加类型 '{0}'", typeof(T).Name ), ex); } } //移除权限 public static T Remove<T>(this System.Enum type, T value) { try { return (T)(object)(((int)(object)type & ~(int)(object)value)); } catch (Exception ex) { throw new ArgumentException( string.Format( "不能移除类型 '{0}'", typeof(T).Name ), ex); } }
使用一下:
//创建一个用户 User admin = new User(); PermissionTypes permissions = new PermissionTypes(); admin.Permissions = permissions; //添加权限 admin.Permissions = admin.Permissions.Add(PermissionTypes.Create); admin.Permissions = admin.Permissions.Add(PermissionTypes.Read); admin.Permissions = admin.Permissions.Add(PermissionTypes.Write); //判断权限 bool canRead = admin.Permissions.Has(PermissionTypes.Read); //true bool canWrite = admin.Permissions.Has(PermissionTypes.Write); //true bool canDelete = admin.Permissions.Has(PermissionTypes.Delete); //false bool canCreate = admin.Permissions.Has(PermissionTypes.Create); //true Console.WriteLine(canRead); //true Console.WriteLine(canWrite); //true Console.WriteLine(canDelete); //false Console.WriteLine(canCreate); //true Console.Read();
现在按照上面的思路,我在SQL Server里面模拟一下上面的操作,在sql中与或运算是很高效的。先设计两张表User和Permission。
1、获取有Read权限的所有用户:
select * from [User] where PermissionTypes&1 =1
2、获取有Delete权限的所有用户:
select * from [User] where PermissionTypes&8 =8
3、判断qilin是否有Delete权限:
if exists (select * from [User] where Name='qilin' and PermissionTypes&8 =8) print 'true' else print 'flase'
发表评论
-
迁移Git仓库
2017-05-06 16:14 6561、从原地址克隆一份裸版本库,例如原来托管于GitHub ... -
putty中文乱码问题
2011-06-27 12:26 1653方法一 打开putty主程序,选择window-〉Appea ... -
关于web216安全色
2011-06-22 14:13 2085web安全色,又叫做网页 ... -
如何用IIS搭建邮件服务器
2011-06-15 09:56 5552很多企业局域网内都架 ... -
客户端打不开TD页面的解决方法
2011-05-11 12:02 2146在客户端输入地址,可以看到TD首页,点击TestDirecto ... -
Web中一些不利于做缓存的因素
2011-05-05 08:23 1247使用SSL做通信的页面 作为安全通信,不做缓存处理,这个时候我 ... -
URL中的连字符(减号)优于下划线
2011-04-29 10:23 5340关于URL中单词连接使用下划线还是连字符(减号),曾有很多讨论 ... -
全世界最短的IE判定
2011-04-25 14:05 1065以前最短的IE判定借助于IE不支持垂直制表符的特性搞出来的。 ... -
49个影响网站排名的因素
2011-03-04 10:24 1160内部因素 URL中出现关键词网页Title中出现关键词常 ... -
影响SEO的页面制作细节
2011-03-03 10:38 12861、将css与javascript全部分离到外部文件中去。让h ... -
自动语法高亮-SyntaxHighlighter
2011-02-27 16:26 1124效果还不错,纯JavaScript实现。官网地址:http:/ ... -
Windows下如何查看端口被占用
2011-01-25 08:41 2141在windows下经常碰到apache启动端口被占用的问题,我 ... -
自动语法高亮-google-code-prettify
2011-01-24 09:31 1702特点是无须指定语言! 使用方法: 1. 包含脚本和样 ... -
configure/make/make install的作用
2011-01-19 08:37 1452在linux上安装软件会用到诸如configure/make/ ... -
如何能让bing快速收录你
2011-01-09 11:32 1750MS的bing(必应)搜索引擎仿佛不像GG和baidu那样。 ... -
SEO工具大全
2011-01-03 21:53 1738域名与主机工具: 域名批量查询:http://www.w ... -
写出漂亮代码的七种方法
2010-12-27 16:25 12781、尽快结束if语句 例如下面这个JavaScript ... -
网站优化七步曲
2010-12-18 14:57 1219第一步:关键词分析 分 ... -
代码的自我审查
2010-12-15 00:22 13121、首先态度需要端正, ... -
从Objective-C的排名看移动开发的火爆程度
2010-12-13 13:04 1650对大多数人来说,Objecti ...
相关推荐
一个角色可以拥有多个权限,一种权限可以被多个角色所拥有。角色是权限设计的核心概念。 权限(Permission) ------------- 权限是指系统中的一个操作或行为,例如创建、读取、更新、删除等。权限是权限设计的最小...
### 一种简单方便的用户权限管理方法 #### 权限管理背景与意义 在软件开发过程中,特别是对于大型系统或企业级应用来说,权限管理是非常关键的一个环节。它不仅能够确保系统的安全性,还能够帮助组织根据不同的...
**概念**:基于角色的权限设计(Role-Based Access Control, RBAC)是一种常见的权限管理方法,它通过赋予用户不同的角色来控制其访问权限。每个角色都与一组预定义的操作权限关联,用户通过获得这些角色间接获得...
在权限设计中,位运算特别有用,因为它可以简洁快速地判断和设置权限状态。...对于需要对权限控制有更深入理解的开发者来说,PHP位运算提供了一种简单而强大的工具,能够在需要的时候进行非常精细的权限操作。
权限设计是一项复杂的任务,但本质上可以简化为一种逻辑判断:“谁(Who)对什么(What)进行了怎样的(How)操作”。权限设计的目标是在项目的实际需求和架构之间找到平衡点,确保权限系统的维护性、灵活性以及完整...
Java权限设计是构建安全应用程序的关键组成部分,它涉及到对系统资源的访问控制,确保只有授权的用户和角色才能执行特定的操作。以下是对标题和描述中提到的知识点的详细说明: 1. **实体设计**: 在Java权限设计...
一种常见的方法是通过角色(Role)和权限(Permission)的概念。角色是权限的集合,一个用户可以被分配一个或多个角色。当用户登录系统时,系统会根据其角色授予相应的权限。这样,我们可以通过判断用户的角色来决定...
3. **权限设计**: - 动态权限:在系统中,权限可以动态分配和调整,以适应业务需求的变化。这包括对角色权限的增删改以及用户角色的调整。 - 权限继承:角色之间可能存在层级关系,上级角色的权限可以被下级角色...
MVC(Model-View-Controller)是一种常见的软件设计模式,常用于Web应用开发。在这个系统中,MVC模式用于分离业务逻辑(Model)、用户界面(View)和控制逻辑(Controller)。Model负责处理数据和业务逻辑,View负责...
"简单的权限控制系统"这个主题主要探讨了如何设计和实施一个基础的权限控制方案,它涉及到用户、角色和权限这三者之间的相互作用。在这个系统中,用户是操作的主体,角色是权限的集合,而权限则定义了用户可以进行的...
5. **涉及实体资源的权限设计**:当用户对某一实体的不同记录有不同的访问权限时,如内容管理系统中用户对某些频道有修改权限,而对其他频道没有,就需要为每种资源创建单独的权限表,如`UserActionContent`和`...
### 权限设计大纲 #### 一、权限设计的核心概念 **权限设计**是指在软件系统中,为了保障系统的安全性和可操作性,通过合理的权限分配机制,来控制不同用户对于系统内各种功能的访问权限的过程。这既包括对用户...
1. **权限设计**: - 增加(Add):允许用户创建新的数据项,如发布文章、添加用户等。 - 删除(Delete):允许用户移除已存在的数据,如删除文章、禁用用户等。 - 查找(Read/View):让用户能够浏览和检索信息...
总的来说,"Needs"项目提供了一种创新的方式来处理权限管理,通过现代UI设计使得权限指令的控制更加直观。对于希望提升用户体验并优化权限管理流程的开发者来说,这是一个值得探索和使用的开源解决方案。通过深入...
首先,XtraGrid是DevExpress提供的一种强大的数据网格控件,它提供了丰富的功能,如数据编辑、排序、过滤和分组等。在权限管理场景中,XtraGrid可以用来显示用户或角色的权限列表,并允许管理员进行增删改查操作。...
一种基于树型结构的BS系统权限控制方法,是IT领域内一种创新的权限管理策略,尤其适用于基于浏览器/服务器(B/S)架构的信息系统。这种方法不仅优化了传统的基于角色的访问控制(RBAC)技术,还针对Web信息系统中...
- **基于角色的访问控制(RBAC)**:最常见的一种模型,用户通过其所属的角色获取权限。 - **基于对象的访问控制(OBAC)**:更关注于数据对象本身,允许对每个对象设置独立的访问权限。 - **基于规则的访问控制...
1. **基于角色的权限设计**:这是一种最基础且广泛采用的方法。系统中预设不同的角色(如管理员、普通用户等),每个角色赋予特定的操作权限集合。在程序执行时,通过判断用户所属的角色来决定其能否执行某项操作。...
为了解决这些问题,本文提出了一种基于AOP(面向切面编程)的权限设计方案。 AOP是一种编程范式,旨在提高代码的模块化和可维护性,特别是在处理跨越多个模块的横切关注点时。它引入了“切面”概念,将这些关注点...