- 浏览: 2476414 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
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 6031、从原地址克隆一份裸版本库,例如原来托管于GitHub ... -
putty中文乱码问题
2011-06-27 12:26 1577方法一 打开putty主程序,选择window-〉Appea ... -
关于web216安全色
2011-06-22 14:13 2018web安全色,又叫做网页 ... -
如何用IIS搭建邮件服务器
2011-06-15 09:56 5476很多企业局域网内都架 ... -
客户端打不开TD页面的解决方法
2011-05-11 12:02 2074在客户端输入地址,可以看到TD首页,点击TestDirecto ... -
Web中一些不利于做缓存的因素
2011-05-05 08:23 1207使用SSL做通信的页面 作为安全通信,不做缓存处理,这个时候我 ... -
URL中的连字符(减号)优于下划线
2011-04-29 10:23 5202关于URL中单词连接使用下划线还是连字符(减号),曾有很多讨论 ... -
全世界最短的IE判定
2011-04-25 14:05 957以前最短的IE判定借助于IE不支持垂直制表符的特性搞出来的。 ... -
49个影响网站排名的因素
2011-03-04 10:24 1127内部因素 URL中出现关键词网页Title中出现关键词常 ... -
影响SEO的页面制作细节
2011-03-03 10:38 12391、将css与javascript全部分离到外部文件中去。让h ... -
自动语法高亮-SyntaxHighlighter
2011-02-27 16:26 1081效果还不错,纯JavaScript实现。官网地址:http:/ ... -
Windows下如何查看端口被占用
2011-01-25 08:41 2092在windows下经常碰到apache启动端口被占用的问题,我 ... -
自动语法高亮-google-code-prettify
2011-01-24 09:31 1617特点是无须指定语言! 使用方法: 1. 包含脚本和样 ... -
configure/make/make install的作用
2011-01-19 08:37 1416在linux上安装软件会用到诸如configure/make/ ... -
如何能让bing快速收录你
2011-01-09 11:32 1706MS的bing(必应)搜索引擎仿佛不像GG和baidu那样。 ... -
SEO工具大全
2011-01-03 21:53 1697域名与主机工具: 域名批量查询:http://www.w ... -
写出漂亮代码的七种方法
2010-12-27 16:25 12371、尽快结束if语句 例如下面这个JavaScript ... -
网站优化七步曲
2010-12-18 14:57 1174第一步:关键词分析 分 ... -
代码的自我审查
2010-12-15 00:22 12681、首先态度需要端正, ... -
从Objective-C的排名看移动开发的火爆程度
2010-12-13 13:04 1600对大多数人来说,Objecti ...
相关推荐
大部分系统都有权限系统。...这是一种很简单,很直观,很高效的方式去判定用户的权限。 C#: 好吧,先从最简单开始,定义一个用户(User)类,如下。 代码如下: class User { bool CanDelete; bool Can
对基于角色的访问控制(RBAC)模型进行了延伸和拓展,提出了一种细粒度权限控制的改进模型FG-RBAC,并在此模型基础上设计开发了一套能为企业信息系统(EIS)开发者和用户提供更简单、更实用、更快速的数据级权限管理...
1.写在最前面最近想写一个简单的关于权限处理的...这样子定义保证了每个权限值(二进制)中只有一个1,而它恰好对应一种权限。比如:复制代码 代码如下:define(‘ADD’, 1); // 增加权限define(‘UPD’, 2); // 修改
在最近的IT记忆里,云迅速成为了最具爆发力的势力之一。它提供更高的可靠性、更好的灵活度、更低的成本和更简单的部署。...而一种革命性的身份管理方式——联邦式身份认证结构——可以跨越企业和云端的界限。
摘 要 针对管理信息系统中用户权限的复杂性 ...’ $ )在管理信息系统中用户权限控制的一种具体实现方法 实际运行结果表明 本文的设计方案具有运行稳定 使用简单等优点 ’ ! % % 关键词 角色访问控制 用户控件 )*+,-./
用户 I D和口令这方法也有它的优点: 如简单, 容易 实现等。因此现在的大多数用户权限系统是使用 了用户 I D和口令来识别合法用户。 本设计的系统是在基于角色控制基础上提取 改进而来的, 对使用用户 I D和...
一个轻量级权限管理系统源码(开发迅速、学习简单、轻量级、易扩展+renren-security).zip一个轻量级权限管理系统源码(开发迅速、学习简单、轻量级、易扩展+renren-security).zip一个轻量级权限管理系统源码(开发...
它由Sun Microsystems(现在是Oracle Corporation)的James Gosling等人在1995年推出,被设计为一种简单、健壮、可移植、多线程、动态的语言。Java的主要特点和优势包括以下几个方面: 跨平台性(Write Once, Run ...
它由Sun Microsystems(现在是Oracle Corporation)的James Gosling等人在1995年推出,被设计为一种简单、健壮、可移植、多线程、动态的语言。Java的主要特点和优势包括以下几个方面: 跨平台性(Write Once, Run ...
它由Sun Microsystems(现在是Oracle Corporation)的James Gosling等人在1995年推出,被设计为一种简单、健壮、可移植、多线程、动态的语言。Java的主要特点和优势包括以下几个方面: 跨平台性(Write Once, Run ...
资源:这里指的资源是广义上的资源,包括很多的东东,模块、数据,菜单、节点、按钮、控件,表、字段、存储过程,页面、窗口、表单、图表、报表,什么都可以算作是一种资源。您也可以把您遇到的一些情况都来算作是一...
软件开发设计:PHP、QT、...云计算与大数据:数据集、包括云计算平台、大数据分析、人工智能、机器学习等,云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。
根据网站需求对系统的数据库和功能模块做了详细设计,并在此基础上实现了用户管理模块、权限管理模块、购物订单模块,商家管理模块、商品管理模块、留言板和公告管理模块等功能。最后通过对网站进行的全面测试展现了...
JavaScript,是一种轻量级的解释型编程语言; jQuery,使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互; Bootstrap 是快速开发 Web 应用程序的前端工具包。它是一个 CSS...
项目说明 是一个轻量级权限管理系统,其核心设计目标是开发迅速、学习简单、轻量级、易扩展 使用renren-security搭建项目,只需编写30%左右代码,其余的代码交给系统自动生成 一个月的工作量,一周就能完成,剩余的...
支持一种货品多个型号、多个仓库情况的管理; 支持货品的无限分级分类支持先进先出、移动平均加权等多种记长方法; 支持条码打印、识别;支持首拼码; 支持报表的自定义设计;支持产品图片管理,支持小数数量出入库...
JAVA毕业设计ssm jsp人才公寓管理系统项目是...总之,JAVA毕业设计ssm jsp人才公寓管理系统项目是一个简单而实用的系统,为人才公寓的管理提供了一种便捷的解决方案,同时也为开发人员提供了一个良好的学习和实践平台。
比较几种常见的访问控制方式的优缺点,目前信息系统的权限管理的需求进行分 析。本文结合公司的基础技术平台的典型应用需求为背景,初步探索了访问控制 的理论、方法以及基本流程,并在此基础上设计了权限管理系统的...
计算机管理系统:这是一种用于管理计算机设备和网络的软件系统。它可以帮助管理员对计算机资源进行监控和管理,包括硬件设备、软件安装和更新、用户账户和权限等。 考试系统:考试系统是一种用于电子化考试管理和...
本设计源码提供了一个基于Springboot和Vue的简单人事管理系统。项目包含69个文件,主要使用Java、HTML和CSS编程语言。文件类型包括23个Java源代码文件、17个PNG图片文件、8个HTML页面文件、6个XML配置文件、5个GZ...