- 浏览: 118782 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (135)
- java (135)
- [转]c# 画圆角矩形 (1)
- 设计模式生活实例 (1)
- .nET2.0小技巧 (1)
- 从另一个角度看敏捷实践(一)--IPM:承诺的仪式 (1)
- javascript字符串转json对象 (1)
- 使用BeanUtils时,Date类型值为空的解决方法 (1)
- Lenovo V460+Ubuntu 11.10 无线网问题 (1)
- Lucene 索引和搜索过程核心类详解 (1)
- Android短信编解码方式 (1)
- 股神巴菲特十大致富秘籍 (1)
- Map遍历的三种方法 (1)
- Android中用Toast.cancel()方法优化toast内容的显示 (1)
- ViewFlipper “Receiver not registered” Error (1)
- javax.xml.transform.TransformerFactoryConfigurationError (1)
- JNI调用的注意事项 (1)
- JUnit单元测试感悟 (1)
- 用C#写定时关机的程序 (1)
- ASP.NET开发工具Web Matrix介绍 (1)
- MapXtreme2004代码 MapControl控件中显示地图文件 (1)
- 《使用 Microsoft .NET 的企业解决方案模式》读书笔记3 (1)
- 微创短信开发平台 (1)
- 谈谈Q+平台的技术实现 (1)
- 手机防盗软件实现(源码) (1)
- 虚析构函数(总结 帖子) (1)
- c语言中去除const修饰 (1)
- ORA-01012: not logged on 解决办法 (1)
- paypal提现如何省钱 (1)
- 数独suduku (1)
- MyISAM InnoDB 区别 (1)
- 随 笔 (1)
- Android上的log,日志相关 (1)
- 百度质量部实习居然通过了~ (1)
最新评论
-
野狐禅:
ext.get('imagebrowse') is null
ExtJs上传图片预览功能 -
zhuyl_wind:
不切实际,呵呵
[]5年内买车买房-理财篇 -
in南京:
关键你那两千块钱就够交一个多月的房租!换个城市你那六百也远远不 ...
[]5年内买车买房-理财篇 -
javac_xinyun:
呵呵,看完了,确实不错,貌似第一年的房租每月算进去 ,人际关系 ...
[]5年内买车买房-理财篇 -
dishikun:
貌似很不错,就是没把房租算进去!
[]5年内买车买房-理财篇
终于写完了 呵呵 简单的一个实现
php 类
具体 检测的代码 如下:
-- acl tables-- 表的结构 `aclresources`drop table if exists `aclresources`;create table if not exists `aclresources` ( `rsid` varchar(64) not null , `access` int(4) not null default 0, `desc` varchar(240) not null default '', `created_at` int(10) unsigned not null default 1, `updated_at` int(10) unsigned not null default 0, primary key (`rsid`))default charset=utf8 collate=utf8_unicode_ci;-- 表的结构 `aclroles`drop table if exists `aclroles`;create table if not exists `aclroles` ( `id` int(10) unsigned not null auto_increment, `rolename` varchar(32) not null , `durces_aclroles` ( `rsid` varchar(64) not null , `role_id` int(10) unsigned not null , primary key (`rsid`,`role_id`))default charset=utf8 collate=utf8_unicode_ci;-- 表的结构 `ref_users_aclroles`drop table if exists `ref_users_aclroles`;create table if not exists `ref_users_aclroles` ( `user_id` int(10) unsigned not null auto_increment, `role_id` int(10) unsigned not null , primary key (`user_id`,`role_id`))default charset=utf8 collate=utf8_unicode_ci;-- 表的结构 `users`drop table if exists `users`;create table `users` ( `id` int(10) unsigned not null auto_increment, `email` varchar(128) not null, `password` varchar(64) not null, `nickname` varchar(32) not null default '', `roles` varchar(240) not null default '', `created_at` int(10) unsigned not null default 1, `updated_at` int(10) unsigned not null default 0, primary key (`id`), unique key `user_email` (`email`))default charset=utf8 collate=utf8_unicode_ci;
php 类
<?php/** * 简单的 acl 权限控制功能 * * 表定义 * * 1. 资源定义 (rsid,access,desc,created_at,updated_at) * 2. 角色定义 (id,rolename,desc,created_at,updated_at) * 3. 资源-角色关联 (rsid,role_id) * 4. 用户-角色关联 (user_id,role_id) * * 依赖db.php sqlobject.php * * @author vb2005xu.iteye.com */class aclbase { // --- acl 访问授权 /** * 不允许任何人访问 */ const nobody = 0; /** * 允许任何人访问 */ const everyone = 1; /** * 允许 拥有角色的用户访问 */ const has_role = 2; /** * 允许 不带有角色的用户访问 */ const no_role = 3; /** * 在 资源-角色关联 定义的 角色才能访问 */ const allocate_roles = 4; // 定义相关的 表名 public $tbresources = 'aclresources'; public $tbroles = 'aclroles'; public $tbrefresourcesroles = 'ref_aclresources_aclroles'; public $tbrefusersroles = 'ref_users_aclroles'; /** * 格式化 资源的访问权限并返回 * * @return int */ static function formataccessvalue($access){ static $arr = array(self::nobody,self::everyone,self::has_role,self::no_role,self::allocate_roles); return in_array($access,$arr) ? $access : self::nobody; } /** * 创建资源,返回资源记录主键 * * @param string $rsid * @param int $access * @param string $desc * * @return int */ function createresource($rsid,$access,$desc){ if (empty($rsid)) return false; $resource = array( 'rsid' => $rsid, 'access' => self::formataccessvalue($access), 'desc' => $desc, 'created_at' => current_timestamp ); return singletablecrud::insert($this->tbresources,$resource); } /** * 修改资源,返回成功状态 * * @param array $resource * @return int */ function updateresource(array $resource){ if (!isset($resource['rsid'])) return false; $resource['updated_at'] = current_timestamp; return singletablecrud::update($this->tbresources,$resource,'rsid'); } /** * 删除资源 * * @param string $rsid * @return int */ function deleteresource($rsid){ if (empty($rsid)) return false; return singletablecrud::delete($this->tbresources,array('rsid'=>$rsid)); } /** * 创建角色,返回角色记录主键 * * @param string $rolename * @param string $desc * * @return int */ function createrole($rolename,$desc){ if (empty($rolename)) return false; $role = array( 'rolename' => $rolename, 'desc' => $desc, 'created_at' => current_timestamp ); return singletablecrud::insert($this->tbroles,$role); } /** * 修改角色,返回成功状态 * * @param array $role * @return int */ function updaterole(array $role){ if (!isset($role['id'])) return false; if (isset($role['rolename'])) unset($role['rolename']); $role['updated_at'] = current_timestamp; return singletablecrud::update($this->tbroles,$role,'id'); } /** * 删除角色 * * @param int $role_id * @return int */ function deleterole($role_id){ if (empty($role_id)) return false; return singletablecrud::delete($this->tbroles,array('role_id'=>(int) $role_id)); } /** * 为资源指定角色,每次均先全部移除表中相关记录再插入 * * @param int $rsid * @param mixed $roleids * @param boolean $setnull 当角色id不存在时,是否将资源从关联表中清空 */ function allocaterolesforresource($rsid,$roleids,$setnull=false,$defaultaccess=-1){ if (empty($rsid)) return false; $roleids = normalize($roleids,','); if (empty($roleids)){ if ($setnull){ singletablecrud::delete($this->tbrefresourcesroles,array('rsid'=>$rsid)); if ($defaultaccess != -1){ $defaultaccess = self::formataccessvalue($defaultaccess); $this->updateresource(array('rsid'=>$rsid,'access'=>$defaultaccess)); } return true; } return false; } singletablecrud::delete($this->tbrefresourcesroles,array('rsid'=>$rsid)); $roleids = array_unique($roleids); foreach ($roleids as $role_id){ singletablecrud::insert($this->tbrefresourcesroles,array('rsid'=>$rsid,'role_id'=>(int)$role_id)); } return true; } function cleanrolesforresource($rsid){ if (empty($rsid)) return false; return singletablecrud::delete($this->tbrefresourcesroles,array('rsid'=>$rsid)); } function cleanresourcesforrole($role_id){ if (empty($role_id)) return false; return singletablecrud::delete($this->tbrefresourcesroles,array('role_id'=>(int) $role_id)); } /** * 为角色分配资源,每次均先全部移除表中相关记录再插入 * * @param int $role_id * @param mixed $rsids * * @return boolean */ function allocateresourcesforrole($role_id,$rsids){ if (empty($role_id)) return false; $role_id = (int) $role_id; $rsids = normalize($rsids,','); if (empty($rsids)){ return false; } singletablecrud::delete($this->tbrefresourcesroles,array('role_id'=>$role_id)); $rsids = array_unique($rsids); foreach ($rsids as $rsid){ singletablecrud::insert($this->tbrefresourcesroles,array('rsid'=>$rsid,'role_id'=>$role_id)); } return true; } /** * 为用户指派角色,每次均先全部移除表中相关记录再插入 * * 此处在用户很多的时候可能会有性能问题 ... 后面再想怎么优化 * * @param int $user_id * @param mixed $roleids * * @return boolean */ function allocaterolesforuser($user_id,$roleids){ if (empty($user_id)) return false; $user_id = (int) $user_id; $roleids = normalize($roleids,','); if (empty($roleids)){ return false; } singletablecrud::delete($this->tbrefusersroles,array('user_id'=>$user_id)); $roleids = array_unique($roleids); foreach ($roleids as $roleid){ singletablecrud::insert($this->tbrefusersroles,array('user_id'=>$user_id,'role_id'=>$role_id)); } return true; } /** * 清除用户的角色信息 * * @param int $user_id * * @return boolean */ function cleanrolesforuser($user_id){ if (empty($user_id)) return false; return singletablecrud::delete($this->tbrefusersroles,array('user_id'=>(int) $user_id)); } /** * 清除角色的用户关联 * * @param int $role_id * * @return boolean */ function cleanusersforrole($role_id){ if (empty($role_id)) return false; return singletablecrud::delete($this->tbrefusersroles,array('role_id'=>(int) $role_id)); } }
具体 检测的代码 如下:
/** * 对资源进行acl校验 * * @param string $rsid 资源标识 * @param array $user 特定用户,不指定则校验当前用户 * * @return boolean */function aclverity($rsid ,array $user = null){ if (empty($rsid)) return false; if (!coreapp::$defaultacl) { coreapp::$defaultacl = new aclflat(); } $rsrow = aclgetresource($rsid); // 未定义资源的缺省访问策略 if (!$rsrow) return false; coreapp::writelog($rsrow,'test'); $rsrow['access'] = aclbase::formataccessvalue($rsrow['access']); // 允许任何人访问 if (aclbase::everyone == $rsrow['access']) return true; // 不允许任何人访问 if (aclbase::nobody == $rsrow['access']) return false; // 获取用户信息 if (empty($user)) $user = isset($_session['si-sysuser']) ? $_session['si-sysuser'] : null; // 用户未登录,则当成无访问权限 if (empty($user)) return false; $user['roles'] = empty($user['roles']) ? null : normalize($user['roles'],';'); $userhasroles = !empty($user['roles']); /** * 允许 不带有角色的用户访问 */ if (aclbase::no_role == $rsrow['access']) return $userhasroles ? false : true; /** * 允许 带有角色的用户访问 */ if (aclbase::has_role == $rsrow['access']) return $userhasroles ? true : false; // --- 对用户进行 资源 <-> 角色 校验 if ($userhasroles){ foreach ($user['roles'] as $role_id){ if ( aclgetrefresourcesroles($rsid,$role_id) ) return true; } dump($user); } return false;}
发表评论
-
百度质量部实习居然通过了~
2012-02-08 12:23 985[size=small;]? ? ?本来打算在软工所苦 ... -
Android上的log,日志相关
2012-02-07 14:18 1524摘自:http://blog.csdn.net/met ... -
随 笔
2012-02-04 13:39 596金风玉露一相逢,便胜却人间无数。英文版: chemis ... -
MyISAM InnoDB 区别
2012-02-02 16:59 731<h1 id="artibody ... -
数独suduku
2012-01-31 14:38 914sudu sudu sudu sudu sudu su ... -
paypal提现如何省钱
2011-12-28 16:58 1221据PayPal中文注册得知,如今很多收样品费的外贸商户 ... -
ORA-01012: not logged on 解决办法
2011-12-28 13:08 3492<span style="font-f ... -
c语言中去除const修饰
2011-12-21 10:54 1427[size=16px;]<span style= ... -
虚析构函数(总结 帖子)
2011-12-21 09:54 698<span style="" ... -
手机防盗软件实现(源码)
2011-12-20 12:54 935<a href="http://blo ... -
谈谈Q+平台的技术实现
2011-12-20 09:49 960这篇文章是我个人 ... -
微创短信开发平台
2011-12-19 11:39 767在网上闲逛,发现了一个站点,微创短信开发平台(http ... -
《使用 Microsoft .NET 的企业解决方案模式》读书笔记3
2011-12-19 10:24 776第3章 Web表示模式 没有一个设计策略能够适合所有情 ... -
MapXtreme2004代码 MapControl控件中显示地图文件
2011-12-15 14:29 901::<?xml:namespace prefix ... -
ASP.NET开发工具Web Matrix介绍
2011-12-15 13:39 965<p class="MsoPlain ... -
用C#写定时关机的程序
2011-12-15 11:14 702</span></font>& ... -
JUnit单元测试感悟
2011-12-14 11:29 861<p class="MsoNorma ... -
JNI调用的注意事项
2011-12-14 09:34 749JNI的简单教程网上很多,看看就能够明白,照着操作也基 ... -
javax.xml.transform.TransformerFactoryConfigurationError
2011-12-13 13:34 848<span style="" ... -
ViewFlipper “Receiver not registered” Error
2011-12-12 10:59 1123偶尔出现这个错误: <span> < ...
相关推荐
总的来说,这个简单的PHP ACL实现提供了一个基础框架,可以根据项目需求进行扩展,比如添加更复杂的权限模型、支持动态权限分配等。对于初学者来说,这是一个很好的起点,有助于理解权限控制的概念和实现方式。
这些文件很可能是用来演示如何通过HTTP GET请求参数实现简单的ACL权限控制。下面将详细解释ACL的概念以及如何在PHP中实现这一功能。 **访问控制列表(ACL)基本概念** 1. **ACL的定义**:访问控制列表是一系列规则...
例如,一个简单的ACL规则可能允许特定IP地址的流量,或者阻止特定端口的服务。 Java实现ACL时,可能涉及的关键概念有: 1. **数据结构**:为了存储和查找规则,可能使用了链表、树或哈希表等数据结构,以实现高效...
使用标准 ACL 可以实现简单的单向访问配置,但是这种方法有一定的局限性,例如无法根据端口号来过滤流量。 5. 使用扩展 ACL 实现单向访问配置 使用扩展 ACL 可以实现更加复杂的单向访问配置,例如根据端口号和协议...
在动态ACL的实现上,思科提供了相应的解决方案,使得路由器支持基于用户身份的动态访问控制。通过这样的配置,即使是在使用DHCP动态分配IP地址的环境中,网络管理员也能够有效地控制用户对互联网的访问权限。 在...
例如,在路由器中,可以使用 ACL 来实现简单的路由条目过滤,而在需要精确抓取路由条目的情况下,可以使用前缀列表。此外,在网络安全和防火墙等应用中,ACL 和前缀列表也可以结合使用,以实现更加复杂和精确的路由...
通过使用ACL,网络管理员能够根据特定的标准来过滤网络流量,从而实现精细化的网络管理。 - **作用**: - **过滤流量**: 根据源地址、目的地址、端口号等条件过滤进入或离开路由器的数据包。 - **安全控制**: 控制...
这类ACL相对简单,但控制粒度较粗,无法识别特定的传输层协议或端口。例如: - 允许特定主机(如172.17.31.222)通过:`access-list 1 permit host 172.17.31.222` - 禁止特定主机通过,允许其他所有主机:`access-...
标准ACL提供了一种简单而有效的方法来控制网络访问,通过精确指定源IP地址,可以实现对网络流量的精细过滤,从而增强网络安全性。然而,由于其只考虑源IP地址,对于需要更复杂过滤规则的情况(如基于协议类型或端口...
该配置实例将指导您如何使用基于时间的ACL来控制网络流量,实现特定的网络安全策略。 时间段定义 在基于时间的ACL配置中,首先需要定义时间段。时间段可以是星期几、工作日、周末或特定的日期范围。使用`time-...
简单来说,ACL就是一种报文过滤器,它可以根据预设的规则过滤出特定的报文,并根据相应的策略决定是否允许这些报文通过。 **目的** 随着网络技术的发展,网络安全问题日益突出,如企业重要资源被随意访问、病毒侵袭...
3. Access Control Lists (ACL):理解和实现网络或系统中的权限管理,以控制不同用户或服务的访问权限。 4. Thrift框架:利用Thrift实现跨语言的通信,结合Lua和C++进行高效服务开发。 通过深入理解和实践这些知识...
- 为了更好地理解和使用Spring Security ACL,可以创建一个简单的示例,如保护一个博客文章,只允许特定用户编辑或删除他们的文章。 - 最佳实践包括合理设计权限层次,避免过度复杂化,以及定期审查和调整权限设置...
网络安全采用的技术很多,而通过访问控制列表(ACL)可以对数据流进行过滤,是实现基本的网络安全手段之一。 二、ACL概述 访问控制列表简称为 ACL,它使用包过滤技术,在路由器上读取第三层及第四层包头中的信息...
标准ACL(Access Control List)是一种常用的网络访问控制机制,它可以根据预定义的规则对网络中的数据进行过滤,以实现简单的访问控制。在这个实验中,我们将学习如何配置标准IP ACL来实现访问控制。 知识点1:...
通过配置ACL,可以实现对网络流量的有效控制,从而提高网络安全性和效率。 **1.1.1 ACL匹配顺序** ACL匹配顺序是理解并正确配置ACL的基础之一。在H3C的设备中,ACL可以通过两种方式进行匹配: 1. **配置顺序**:...
### ACL(访问控制列表)实验图文详细配置 #### 一、引言 访问控制列表(Access Control List,简称ACL)是网络设备上...此外,实验还展示了如何通过简单的配置实现特定的网络策略,这在实际工作中是非常实用的技能。