<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.huihoo.com/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-cn">
		<id>http://wiki.huihoo.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Grady</id>
		<title>开放百科 - 灰狐 - 用户贡献 [zh-cn]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.huihoo.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Grady"/>
		<link rel="alternate" type="text/html" href="http://wiki.huihoo.com/wiki/%E7%89%B9%E6%AE%8A:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE/Grady"/>
		<updated>2026-05-15T09:21:44Z</updated>
		<subtitle>用户贡献</subtitle>
		<generator>MediaWiki 1.19.2</generator>

	<entry>
		<id>http://wiki.huihoo.com/wiki/Ralasafe/user/business_data</id>
		<title>Ralasafe/user/business data</title>
		<link rel="alternate" type="text/html" href="http://wiki.huihoo.com/wiki/Ralasafe/user/business_data"/>
				<updated>2011-06-15T16:17:34Z</updated>
		
		<summary type="html">&lt;p&gt;Grady：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;业务数据分类，是对业务实体即Java对象（值对象、实体Bean）进行基于规则的动态分类，Ralasafe不限定该业务数据分类的条件，只要该业务模型对应为普通的JavaBean即可。因为Ralasafe需要使用Java 反射技术对业务数据相关属性进行读取。比如name属性，会反射调用getName()方法。&lt;br /&gt;
&lt;br /&gt;
假设我们的实体类里面有金额字段，我们举如下例子：&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|业务数据分类名称 || 规则&lt;br /&gt;
|-&lt;br /&gt;
|大于5000的取款  ||'''金额'''字段值大于5000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
我们继续考察如下复杂一些的例子：&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|业务数据分类名称 || 规则&lt;br /&gt;
|-&lt;br /&gt;
|登录用户所在公司的订单  ||  '''订单'''的'''机构id'''＝登录'''用户'''的'''机构id'''&lt;br /&gt;
|-&lt;br /&gt;
|加上本笔取款全体取款额大于20000 ||  本笔(次)取款额+当天本人取款额之和(通过数据查询得到）&amp;gt;20000&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Grady</name></author>	</entry>

	<entry>
		<id>http://wiki.huihoo.com/wiki/Ralasafe/user/business_data</id>
		<title>Ralasafe/user/business data</title>
		<link rel="alternate" type="text/html" href="http://wiki.huihoo.com/wiki/Ralasafe/user/business_data"/>
				<updated>2011-06-15T16:11:22Z</updated>
		
		<summary type="html">&lt;p&gt;Grady：以内容'业务数据分类，是对业务实体即Java对象（值对象、实体Bean）进行基于规则的动态分类，Ralasafe不限定该业务数据分类的条件，只要...'创建新页面&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;业务数据分类，是对业务实体即Java对象（值对象、实体Bean）进行基于规则的动态分类，Ralasafe不限定该业务数据分类的条件，只要该业务模型对应为普通的JavaBean 即可。因为Ralasafe需要使用Java 反射技术对业务数据相关属性进行读取。比如name属性，会反射调用getName()方法。&lt;br /&gt;
&lt;br /&gt;
假设我们的实体类里面有金额字段，我们举如下例子：&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|业务数据分类名称 || 规则&lt;br /&gt;
|-&lt;br /&gt;
|大于5000的取款  ||'''金额'''字段值大于5000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
我们继续考察如下复杂一些的例子：&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|业务数据分类名称 || 规则&lt;br /&gt;
|-&lt;br /&gt;
|登录用户所在公司的订单  ||  订单的机构id＝登录用户的机构id&lt;br /&gt;
|-&lt;br /&gt;
|加上本笔取款全体取款额大于20000 ||  本笔取款额+数据查询（当天本人取款额之和）&amp;gt;20000&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Grady</name></author>	</entry>

	<entry>
		<id>http://wiki.huihoo.com/wiki/Ralasafe/user</id>
		<title>Ralasafe/user</title>
		<link rel="alternate" type="text/html" href="http://wiki.huihoo.com/wiki/Ralasafe/user"/>
				<updated>2011-06-15T15:47:22Z</updated>
		
		<summary type="html">&lt;p&gt;Grady：/* 业务数据分类 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Ralasafe]] 参考手册&lt;br /&gt;
&lt;br /&gt;
=安装篇=&lt;br /&gt;
==安装Ralasafe (with demo)[推荐！]==&lt;br /&gt;
[[Ralasafe/user/install with demo|with demo]]&lt;br /&gt;
&lt;br /&gt;
==安装Ralasafe (without demo)==&lt;br /&gt;
[[Ralasafe/user/install without demo|without demo]]&lt;br /&gt;
&lt;br /&gt;
=五分钟快速入门=&lt;br /&gt;
[[Ralasafe/user/hello world|hello world]]&lt;br /&gt;
&lt;br /&gt;
=基础篇=&lt;br /&gt;
==基础概念==&lt;br /&gt;
==权限数据来源==&lt;br /&gt;
==权限模型及权限设置==&lt;br /&gt;
==用户分类==&lt;br /&gt;
[[Ralasafe/user/user category|什么是用户分类]]&lt;br /&gt;
&lt;br /&gt;
==数据查询==&lt;br /&gt;
==业务数据分类==&lt;br /&gt;
[[Ralasafe/user/business data|什么是业务数据分类]]&lt;br /&gt;
&lt;br /&gt;
==便捷人性化操作==&lt;br /&gt;
=测试篇=&lt;br /&gt;
=集成篇=&lt;br /&gt;
==与应用系统集成==&lt;br /&gt;
==Ralasafe API讲解==&lt;br /&gt;
=部署篇=&lt;br /&gt;
==完整部署（权限引擎+管理端）==&lt;br /&gt;
==部分部署（权限引擎）==&lt;br /&gt;
=高级进阶篇=&lt;br /&gt;
==手工编写规则==&lt;br /&gt;
==案例解析1==&lt;br /&gt;
==案例解析2==&lt;br /&gt;
&lt;br /&gt;
[[Category:Ralasafe]]&lt;/div&gt;</summary>
		<author><name>Grady</name></author>	</entry>

	<entry>
		<id>http://wiki.huihoo.com/wiki/Ralasafe/user/user_category</id>
		<title>Ralasafe/user/user category</title>
		<link rel="alternate" type="text/html" href="http://wiki.huihoo.com/wiki/Ralasafe/user/user_category"/>
				<updated>2011-06-14T16:17:08Z</updated>
		
		<summary type="html">&lt;p&gt;Grady：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;先上个例子，假设用户表中有性别，年龄这些字段，那么所有性别等于'男'的用户属于一个分类，所有年龄大于20的用户属于一个分类，所有性别等于'女'并且年龄小于20的属于另一个分类，至此，你应该明白，所谓的用户分类只是一个根据某些条件来划分的一个用户群组，它是基于规则描述的，是动态生成的，看起来像我们SQL语句使用 WHERE查询的结果集，不是吗？&lt;br /&gt;
&lt;br /&gt;
这里容易混淆的是角色，通常在我们的传统开发中一般会将角色赋予用户，从而使该用户拥有该角色，如果没有赋予动作，用户则不会具有某角色，但没有赋予动作，用户可能会属于某种“'''用户分类'''”，因为用户分类不必“显式”地将该用户划入该群组。&lt;br /&gt;
&lt;br /&gt;
由此可见Ralasafe将“用户分类”定义为一种动态用户组，它是基于规则描述的。相比之下，我们传统意义的“角色”相当于静态用户组。&lt;br /&gt;
&lt;br /&gt;
如果你操作过Ralasafe自带的Demo，那么下面关于用户分类的例子会更加清晰：&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| 用户分类名称 ||规则 &lt;br /&gt;
|-&lt;br /&gt;
| 总公司用户 || 用户的机构ID＝总公司机构ID &lt;br /&gt;
|-&lt;br /&gt;
| 分公司用户 || 用户的机构level＝分公司机构level&lt;br /&gt;
|-&lt;br /&gt;
|北京分公司用户 || 用户的机构ID＝北京分公司机构ID&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
以上分类基于用户的属性进行规则判定。下面，我们看其他类型的分类：&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| 用户分类名称 ||规则 &lt;br /&gt;
|-&lt;br /&gt;
| 临时调查组用户 || 用户的id号在数据表临时调查组（SPEC_USER）有记录 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
一般情况下，开发者需要开发临时调查组（SPEC_USER）表增删改查功能。当用户（一般是业务管理员或者IT管理员）将某个用户（如“李四”）记录增加到该表，李四就属于临时调查组用户；如果用户（一般是业务管理员或者IT管理员）将“李四”记录从该表删除，李四就不再属于临时调查组用户了。这个看起来有点像静态用户组。&lt;br /&gt;
&lt;br /&gt;
[[Category:Ralasafe]]&lt;/div&gt;</summary>
		<author><name>Grady</name></author>	</entry>

	<entry>
		<id>http://wiki.huihoo.com/wiki/Ralasafe/user/user_category</id>
		<title>Ralasafe/user/user category</title>
		<link rel="alternate" type="text/html" href="http://wiki.huihoo.com/wiki/Ralasafe/user/user_category"/>
				<updated>2011-06-14T10:55:27Z</updated>
		
		<summary type="html">&lt;p&gt;Grady：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;先上个例子，假设用户表中有性别，年龄这些字段，那么所有性别等于'男'的用户属于一个分类，所有年龄大于20的用户属于一个分类，所有性别等于'女'并且年龄小于20的属于另一个分类，至此，你应该明白，所谓的用户分类只是一个根据某些条件来划分的一个用户群组，它是基于规则描述的，是动态生成的，看起来像我们SQL语句使用 WHERE查询的结果集，不是吗？&lt;/div&gt;</summary>
		<author><name>Grady</name></author>	</entry>

	<entry>
		<id>http://wiki.huihoo.com/wiki/Ralasafe/user/user_category</id>
		<title>Ralasafe/user/user category</title>
		<link rel="alternate" type="text/html" href="http://wiki.huihoo.com/wiki/Ralasafe/user/user_category"/>
				<updated>2011-06-14T10:54:47Z</updated>
		
		<summary type="html">&lt;p&gt;Grady：以内容'先上个例子，假设用户表中有性别，年龄这些字段，那么所有性别等于'男'的用户属于一个分类，所有年龄大于20的用户属于一个分...'创建新页面&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;先上个例子，假设用户表中有性别，年龄这些字段，那么所有性别等于'男'的用户属于一个分类，所有年龄大于20的用户属于一个分类，所有性别等于'女'并且年龄小于20的属于另一个分类，至此，你应该明白，所谓的用户分类只是一个根据某些条件来划分的一个用户群组，它是基于规则描述的，是动态生成的，看起来像我们SQL语句使用 WHERE查询的结果，不是吗？&lt;/div&gt;</summary>
		<author><name>Grady</name></author>	</entry>

	<entry>
		<id>http://wiki.huihoo.com/wiki/Ralasafe/user</id>
		<title>Ralasafe/user</title>
		<link rel="alternate" type="text/html" href="http://wiki.huihoo.com/wiki/Ralasafe/user"/>
				<updated>2011-06-14T10:17:51Z</updated>
		
		<summary type="html">&lt;p&gt;Grady：/* 用户分类 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Ralasafe]] 参考手册&lt;br /&gt;
&lt;br /&gt;
=安装篇=&lt;br /&gt;
==安装Ralasafe (with demo)[推荐！]==&lt;br /&gt;
[[Ralasafe/user/install with demo|with demo]]&lt;br /&gt;
&lt;br /&gt;
==安装Ralasafe (without demo)==&lt;br /&gt;
[[Ralasafe/user/install without demo|without demo]]&lt;br /&gt;
&lt;br /&gt;
=五分钟快速入门=&lt;br /&gt;
[[Ralasafe/user/hello world|hello world]]&lt;br /&gt;
&lt;br /&gt;
=基础篇=&lt;br /&gt;
==基础概念==&lt;br /&gt;
==权限数据来源==&lt;br /&gt;
==权限模型及权限设置==&lt;br /&gt;
==用户分类==&lt;br /&gt;
[[Ralasafe/user/user category|什么是用户分类]]&lt;br /&gt;
&lt;br /&gt;
==数据查询==&lt;br /&gt;
==业务数据分类==&lt;br /&gt;
==便捷人性化操作==&lt;br /&gt;
=测试篇=&lt;br /&gt;
=集成篇=&lt;br /&gt;
==与应用系统集成==&lt;br /&gt;
==Ralasafe API讲解==&lt;br /&gt;
=部署篇=&lt;br /&gt;
==完整部署（权限引擎+管理端）==&lt;br /&gt;
==部分部署（权限引擎）==&lt;br /&gt;
=高级进阶篇=&lt;br /&gt;
==手工编写规则==&lt;br /&gt;
==案例解析1==&lt;br /&gt;
==案例解析2==&lt;br /&gt;
&lt;br /&gt;
[[Category:Ralasafe]]&lt;/div&gt;</summary>
		<author><name>Grady</name></author>	</entry>

	<entry>
		<id>http://wiki.huihoo.com/wiki/Ralasafe/user/install_with_demo</id>
		<title>Ralasafe/user/install with demo</title>
		<link rel="alternate" type="text/html" href="http://wiki.huihoo.com/wiki/Ralasafe/user/install_with_demo"/>
				<updated>2011-06-13T14:37:26Z</updated>
		
		<summary type="html">&lt;p&gt;Grady：/* Demo 场景演示 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;安装 [[Ralasafe]] (with demo)&lt;br /&gt;
&lt;br /&gt;
==下载==&lt;br /&gt;
如果你是Ralasafe初学者，如果你是期望快速了解Ralasafe功能的开发者、决策者，我们建议你下载Ralasafe Demo（[http://sourceforge.net/projects/ralasafe/files/1.0-v20101009/ralasafe_demo-1.0-v20101009.zip/download 下载地址]&lt;br /&gt;
。如果下载速度慢，请切换其他镜像（Mirror））。通过快速安装Ralasafe Demo应用，可以快速了解Ralasafe安装、界面及产品功能。&lt;br /&gt;
&lt;br /&gt;
==安装环境==&lt;br /&gt;
Java 运行环境：Jdk 1.4以上&lt;br /&gt;
数据库环境：Mysql或者Oracle 9i以上&lt;br /&gt;
Web 服务器：Tomcat&lt;br /&gt;
浏览器：建议Chrome，Firefox浏览器&lt;br /&gt;
安装前，请确认你的安装机器有以上软件。&lt;br /&gt;
&lt;br /&gt;
我们以安装到Tomcat +MYSQL环境为例进行讲解。&lt;br /&gt;
&lt;br /&gt;
Ralasafe Demo安装非常简单，有：&lt;br /&gt;
&lt;br /&gt;
# 复制文件；&lt;br /&gt;
# 修改部分配置文件——数据源和web.xml；&lt;br /&gt;
# 导入Demo应用数据。&lt;br /&gt;
&lt;br /&gt;
三部分工作组成。&lt;br /&gt;
&lt;br /&gt;
解压ralasafe_demo-${buildNumber}.zip到任意目录。以下我们以${unzip_dir}来代替。&lt;br /&gt;
&lt;br /&gt;
===复制文件===&lt;br /&gt;
#在${Tomcat_dir}/webapps下创建demo目录，&lt;br /&gt;
#并将${unzip_dir}/WebContent/所有内容复制到${Tomcat_dir}/webapps/demo/目录下；&lt;br /&gt;
#然后，将${unzip_dir}/xml目录复制到${Tomcat_dir}/webapps/demo目录下。（如果你使用Oracle 数据库，复制${unzip_dir/xml(oracle)到${Tomcat_dir}/webapps/demo目录下，并将xml(oracle)目录重命名为xml。）&lt;br /&gt;
&lt;br /&gt;
=== 修改部分配置文件 ===&lt;br /&gt;
&lt;br /&gt;
# 修改web.xml中repositoryDir参数值（大约在73行），将其值改为${Tomcat_dir}/webapps/demo/xml。（请使用真实地址代替${Tomcat_dir}）；&lt;br /&gt;
# 修改${Tomcat_dir}/webapps/demo/WEB-INF/ralasafe/ralasafe-db.properties，修改jdbcUser和jdbcPassword值，使用你的mysql用户名和密码；（数据库待会儿导入）&lt;br /&gt;
# 修改${Tomcat_dir}/webapps/demo/WEB-INF/ralasafe/app-ds.properties，修改jdbcUser和jdbcPassword值，使用你的mysql用户名和密码。（数据库待会儿导入）&lt;br /&gt;
&lt;br /&gt;
=== 导入Demo应用数据 ===&lt;br /&gt;
&lt;br /&gt;
使用Mysql GUI Tool将${unzip_dir}/sql/demo-mysql.sql导入到mysql数据库。该脚本会在mysql数据库里面创建2个新库：mydemo和ralasafe，并导入相关数据。&lt;br /&gt;
&lt;br /&gt;
如果，你使用oracle数据库。那么请先创建2个用户名：mydemo和ralasafe。将${unzip_dir}/sql/demo-oracle(mydemo schema).sql 导入到mydemo schema；将${unzip_dir}/sql/demo-oracle(ralasafe schema).sql 导入到ralasafe schema。 导入后，你还要对数据源配置文件做相应修改。 ${Tomcat_dir}/webapps/demo/WEB-INF/ralasafe/ralasafe-db.properties和${Tomcat_dir}/webapps/demo/WEB-INF/ralasafe/app-ds.properties，修改jdbcDriver，jdbcUrl，jdbcUser和jdbcPassword值。&lt;br /&gt;
&lt;br /&gt;
== Demo 场景演示 ==&lt;br /&gt;
&lt;br /&gt;
Ralasafe Demo 演示了2个场景：&lt;br /&gt;
&lt;br /&gt;
#  HR系统的员工查询功能，查询需求是：&lt;br /&gt;
## 总公司用户可以查询所有员工；&lt;br /&gt;
## 分公司用户只能查询所在分公司及下属营业部员工；&lt;br /&gt;
## 营业部用户只能查询所在营业部员工。&lt;br /&gt;
#  财务系统借款功能，决策需求是：&lt;br /&gt;
## 每个人每次借款上限5000元；&lt;br /&gt;
## 每个人每天总借款额不能超过20000元。&lt;br /&gt;
&lt;br /&gt;
你通过这个界面登录查看演示效果：[http://localhost:8080/demo/ralasafe/demo/login.jsp 登录]，该页面登陆框下方提示有登录用户名。他们分别代表总公司用户、分公司用户和营业部用户。&lt;br /&gt;
&lt;br /&gt;
你通过这个界面查看Ralasafe 如何实现了上述访问控制策略：[http://localhost:8080/demo/ralasafe/designer 设计器]。展开左边权限面板，点击“Query Employee”，查看其访问控制策略；点击“Loan Money”，查看其访问控制策略。&lt;br /&gt;
&lt;br /&gt;
细心的朋友会发现Ralasafe Demo在其他几个地方也用到了访问控制：&lt;br /&gt;
&lt;br /&gt;
# 员工查询界面的机构下拉框，不同人登录的时候显示登录用户所在机构；&lt;br /&gt;
# 员工查询界面的员工列表后的删除链接，当员工所在机构和登录用户机构一致时，才显示了删除链接，否则没有显示。&lt;br /&gt;
# 借款界面的下方的借款记录，仅显示登录用户当天记录记录。&lt;br /&gt;
&lt;br /&gt;
== Demo集成介绍 ==&lt;br /&gt;
&lt;br /&gt;
=== 登录控制介绍 ===&lt;br /&gt;
&lt;br /&gt;
Demo 登录控制实现了如下功能：&lt;br /&gt;
&lt;br /&gt;
# 当用户没有登录时，转到登录页面；&lt;br /&gt;
# 当用户输入用户名、密码后，验证用户名、密码。如果匹配，转到菜单显示页面；否则继续转到登录页面。&lt;br /&gt;
&lt;br /&gt;
完成这些工作，Demo 只要编写登录页面（${Tomcat_dir}/webapps/demo/ralasafe/demo/login.jsp）和登录后菜单显示页面（${Tomcat_dir}/webapps/demo/ralasafe/demo/main.jsp），其他的全部交给ralasafe自带的org.ralasafe.webFilter.LoginFilter完成。将LoginFilter配置到web.xml即可。具体参数意义查看[http://www.ralasafe.org/zh/guide/reference/javadoc/org/ralasafe/webFilter/LoginFilter.html JavaDoc]。&lt;br /&gt;
&lt;br /&gt;
LoginFilter会对用户访问的路径（该路径在web.xml配置的url-pattern规则内）进行过滤，如果用户没有登录，转到登录页面；否则继续。在登录页面的时候，当用户输入用户名、密码后，LoginFilter会自动与后台用户表记录进行比对，如果匹配，登录成功，继续提交执行；否则，返回到登录页面。&lt;br /&gt;
&lt;br /&gt;
=== URL访问权限控制 ===&lt;br /&gt;
&lt;br /&gt;
Demo 没有在各个Servlet里面对URL访问权限进行判断。URL访问权限判断工作，也完全交给Ralasafe自带的org.ralasafe.webFilter.UrlAclFilter来完成。直接将其配置到web.xml即可。&lt;br /&gt;
&lt;br /&gt;
UrlAclFilter基本工作原理是：对当前URL与权限表的url字段进行比对，不仅比对路径，如果有参数（形如xxx?oper=add），还比对参数。如果有匹配上的，说明当前访问url需要进行权限验证。此时UrlAclFilter会安装用户角色权限关系进行验证；如果没有匹配上，说明当前url无需进行url权限验证。&lt;br /&gt;
&lt;br /&gt;
具体参数意义查看[http://www.ralasafe.org/zh/guide/reference/javadoc/org/ralasafe/webFilter/UrlAclFilter.html JavaDoc]&lt;br /&gt;
&lt;br /&gt;
=== 代码集成 ===&lt;br /&gt;
&lt;br /&gt;
我们先看${unzip_dir}/src/org/ralasafe/demo/EmployeeServlet.java，第84，85行代码：&lt;br /&gt;
&amp;lt;source lang=java&amp;gt;&lt;br /&gt;
Collection employees = WebRalasafe.query(req, Privilege.QUERY_EMPLOYEE);&lt;br /&gt;
req.setAttribute(&amp;quot;employees&amp;quot;, employees);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
调用WebRalasafe API，传入HttpRequest参数和当前操作权限ID。WebRalasafe将调用Ralasafe权限引擎，返回当前用户具有权限查看的数据，即数据级权限。开发人员不需要编写一行查询代码。Ralasafe也支持分页、条件查询、多表查询。&lt;br /&gt;
当前用户直接从HttpRequest.getSession()里面获取；Privilege.QUERY_EMPLOYEE是从Ralasafe Designer里面导出的常量，不需要人工编程。&lt;br /&gt;
返回的Collection employees是根据业务需求自定义的Java实体类。Demo 应用里是org.ralasafe.demo.Employee。&lt;br /&gt;
显示员工的Jsp页面${unzip_dir}/WebContent/ralasafe/demo/employee.jsp，相关显示员工代码如下：&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Ralasafe]]&lt;/div&gt;</summary>
		<author><name>Grady</name></author>	</entry>

	<entry>
		<id>http://wiki.huihoo.com/wiki/Ralasafe/user/hello_world</id>
		<title>Ralasafe/user/hello world</title>
		<link rel="alternate" type="text/html" href="http://wiki.huihoo.com/wiki/Ralasafe/user/hello_world"/>
				<updated>2011-06-12T15:41:13Z</updated>
		
		<summary type="html">&lt;p&gt;Grady：/* 查询权限 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Ralasafe功能==&lt;br /&gt;
从某种意义来说，Ralasafe给权限管理领域带来一种全新思考。它是从业务功能角度出发，并非从编程角度出发；提供最简单实用的API，供开发人员集成到业务系统，将复杂的权限逻辑全部交给Ralasafe；并非提供某种强大而又神奇的模板，或者某些强大而又神奇的权限设置界面。&lt;br /&gt;
&lt;br /&gt;
通过API调用和Ralasafe设计器设计工作，减少很多编程工作。Ralasafe提供的界面完全面向开发人员和IT管理员，因此开发人员还需要为业务系统编写“权限管理”相关界面。（仅仅是界面，不需要在各处业务应用做权限逻辑验证等开发工作）&lt;br /&gt;
&lt;br /&gt;
==查询权限==&lt;br /&gt;
场景举例：总公司用户查询所有员工；北京分公司用户只能查询北京分公司及下属子公司员工；海淀营业部用户只能查询海淀营业部员工。&lt;br /&gt;
&lt;br /&gt;
Ralasafe的查询API，可以满足以上场景：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//返回QueryResult对象，&lt;br /&gt;
&lt;br /&gt;
//通过QueryResult.getData()获取查询值Collectio&amp;lt;定制的ViewObject/Javabean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
org.ralasafe.Ralasafe.query(int privilegeId, User user, java.util.Map context);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
通过API告诉Ralasafe当前是谁（User user），打算进行什么操作（int privilegeId，也相当于请求查询什么数据）。API本身并不包含任何权限信息。这种层级查询权限，交由Ralasafe设计器解决。Ralasafe设计器设计权限策略。当应用程序调用Ralasafe API的时候，将由Ralasafe专业引擎解析权限策略，并进行数据库查询，返回查询结果。以下是该场景设计权限策略：&lt;br /&gt;
&lt;br /&gt;
[插入图片]&lt;br /&gt;
&lt;br /&gt;
Ralasafe同时还提供了分页查询和自定义查询API。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package org.ralasafe;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
import org.ralasafe.entitle.QueryResult;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public class Ralasafe {&lt;br /&gt;
&lt;br /&gt;
//分页查询&lt;br /&gt;
&lt;br /&gt;
public static QueryResult query(int privilegeId, User user, java.util.Map context, int first, int max);&lt;br /&gt;
&lt;br /&gt;
//自定义条件查询&lt;br /&gt;
&lt;br /&gt;
public static QueryResult query(int privilegeId, User user, java.util.Map context,&lt;br /&gt;
&lt;br /&gt;
                                           CustomizedWhere where);&lt;br /&gt;
&lt;br /&gt;
//自定义条件并分页查询&lt;br /&gt;
&lt;br /&gt;
public static QueryResult query(int privilegeId, User user, java.util.Map context,&lt;br /&gt;
&lt;br /&gt;
                                           CustomizedWhere where, int first, int max);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
package org.ralasafe.entitle;&lt;br /&gt;
&lt;br /&gt;
public class QueryResult {&lt;br /&gt;
&lt;br /&gt;
//查询结果记录数&lt;br /&gt;
&lt;br /&gt;
public int getTotalCount();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==决策权限==&lt;br /&gt;
场景举例：ATM机取款每次取款额不能超过￥5000，每天取款总额不能超过￥20000。&lt;br /&gt;
Ralasafe的决策API，可以满足以上场景：&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//返回Decision对象，通过Decision.isPermit()获知是否有操作权限；&lt;br /&gt;
&lt;br /&gt;
// 通过Decision.getDenyReason()获知拒绝理由&lt;br /&gt;
&lt;br /&gt;
org.ralasafe.Ralasafe.permit(int privilegeId, User user,&lt;br /&gt;
&lt;br /&gt;
                            java.lang.Object businessData, java.util.Map context);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
通过API告诉Ralasafe当前是谁（User user），打算进行什么操作（int privilegeId），操作数据是什么（Object businessData）。API本身并不包含任何权限信息。这种决策权限，交由Ralasafe设计器解决。Ralasafe设计器设计权限策略。当应用程序调用Ralasafe API的时候，将由Ralasafe专业引擎解析权限策略，并返回决策结果。以下是该场景设计权限策略：&lt;br /&gt;
&lt;br /&gt;
[图片]&lt;br /&gt;
&lt;br /&gt;
==小结==&lt;br /&gt;
Ralasafe的API非常简洁易懂，而且Ralasafe的图形界面设计出的权限策略，也非常简洁易懂。这样不仅有助于开发人员集成Ralasafe，而且有助于向客户说明系统安全状况到底如何。&lt;br /&gt;
&lt;br /&gt;
Ralasafe的图形设计，不仅减少了很多开发工作量；在权限需求发生变动的时候，有助于快速更改。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Ralasafe]]&lt;/div&gt;</summary>
		<author><name>Grady</name></author>	</entry>

	<entry>
		<id>http://wiki.huihoo.com/wiki/Ralasafe/user/hello_world</id>
		<title>Ralasafe/user/hello world</title>
		<link rel="alternate" type="text/html" href="http://wiki.huihoo.com/wiki/Ralasafe/user/hello_world"/>
				<updated>2011-06-12T15:02:00Z</updated>
		
		<summary type="html">&lt;p&gt;Grady：/* 查询权限 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Ralasafe功能==&lt;br /&gt;
从某种意义来说，Ralasafe给权限管理领域带来一种全新思考。它是从业务功能角度出发，并非从编程角度出发；提供最简单实用的API，供开发人员集成到业务系统，将复杂的权限逻辑全部交给Ralasafe；并非提供某种强大而又神奇的模板，或者某些强大而又神奇的权限设置界面。&lt;br /&gt;
&lt;br /&gt;
通过API调用和Ralasafe设计器设计工作，减少很多编程工作。Ralasafe提供的界面完全面向开发人员和IT管理员，因此开发人员还需要为业务系统编写“权限管理”相关界面。（仅仅是界面，不需要在各处业务应用做权限逻辑验证等开发工作）&lt;br /&gt;
&lt;br /&gt;
==查询权限==&lt;br /&gt;
场景举例：总公司用户查询所有员工；北京分公司用户只能查询北京分公司及下属子公司员工；海淀营业部用户只能查询海淀营业部员工。&lt;br /&gt;
&lt;br /&gt;
Ralasafe的查询API，可以满足以上场景：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//返回QueryResult对象，&lt;br /&gt;
&lt;br /&gt;
//通过QueryResult.getData()获取查询值Collectio&amp;lt;定制的ViewObject/Javabean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
org.ralasafe.Ralasafe.query(int privilegeId, User user, java.util.Map context);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
通过API告诉Ralasafe当前是谁（User user），打算进行什么操作（int privilegeId，也相当于请求查询什么数据）。API本身并不包含任何权限信息。这种层级查询权限，交由Ralasafe设计器解决。Ralasafe设计器设计权限策略。当应用程序调用Ralasafe API的时候，将由Ralasafe专业引擎解析权限策略，并进行数据库查询，返回查询结果。以下是该场景设计权限策略：&lt;br /&gt;
&lt;br /&gt;
[插入图片]&lt;br /&gt;
&lt;br /&gt;
Ralasafe同时还提供了分页查询和自定义查询API。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package org.ralasafe;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
import org.ralasafe.entitle.QueryResult;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
public class Ralasafe {&lt;br /&gt;
&lt;br /&gt;
//分页查询&lt;br /&gt;
&lt;br /&gt;
public static QueryResult query(int privilegeId, User user, java.util.Map context, int first, int max);&lt;br /&gt;
&lt;br /&gt;
//自定义条件查询&lt;br /&gt;
&lt;br /&gt;
public static QueryResult query(int privilegeId, User user, java.util.Map context,&lt;br /&gt;
&lt;br /&gt;
                                           CustomizedWhere where);&lt;br /&gt;
&lt;br /&gt;
//自定义条件并分页查询&lt;br /&gt;
&lt;br /&gt;
public static QueryResult query(int privilegeId, User user, java.util.Map context,&lt;br /&gt;
&lt;br /&gt;
                                           CustomizedWhere where, int first, int max);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
package org.ralasafe.entitle;&lt;br /&gt;
&lt;br /&gt;
public class QueryResult {&lt;br /&gt;
&lt;br /&gt;
//查询结果记录数&lt;br /&gt;
&lt;br /&gt;
public int getTotalCount();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grady</name></author>	</entry>

	<entry>
		<id>http://wiki.huihoo.com/wiki/Ralasafe/user/hello_world</id>
		<title>Ralasafe/user/hello world</title>
		<link rel="alternate" type="text/html" href="http://wiki.huihoo.com/wiki/Ralasafe/user/hello_world"/>
				<updated>2011-06-12T14:56:00Z</updated>
		
		<summary type="html">&lt;p&gt;Grady：/* Ralasafe功能 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Ralasafe功能==&lt;br /&gt;
从某种意义来说，Ralasafe给权限管理领域带来一种全新思考。它是从业务功能角度出发，并非从编程角度出发；提供最简单实用的API，供开发人员集成到业务系统，将复杂的权限逻辑全部交给Ralasafe；并非提供某种强大而又神奇的模板，或者某些强大而又神奇的权限设置界面。&lt;br /&gt;
&lt;br /&gt;
通过API调用和Ralasafe设计器设计工作，减少很多编程工作。Ralasafe提供的界面完全面向开发人员和IT管理员，因此开发人员还需要为业务系统编写“权限管理”相关界面。（仅仅是界面，不需要在各处业务应用做权限逻辑验证等开发工作）&lt;br /&gt;
&lt;br /&gt;
==查询权限==&lt;br /&gt;
场景举例：总公司用户查询所有员工；北京分公司用户只能查询北京分公司及下属子公司员工；海淀营业部用户只能查询海淀营业部员工。&lt;br /&gt;
&lt;br /&gt;
Ralasafe的查询API，可以满足以上场景：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//返回QueryResult对象，&lt;br /&gt;
&lt;br /&gt;
//通过QueryResult.getData()获取查询值Collectio&amp;lt;定制的ViewObject/Javabean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
org.ralasafe.Ralasafe.query(int privilegeId, User user, java.util.Map context);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grady</name></author>	</entry>

	<entry>
		<id>http://wiki.huihoo.com/wiki/Ralasafe/user/hello_world</id>
		<title>Ralasafe/user/hello world</title>
		<link rel="alternate" type="text/html" href="http://wiki.huihoo.com/wiki/Ralasafe/user/hello_world"/>
				<updated>2011-06-12T14:40:38Z</updated>
		
		<summary type="html">&lt;p&gt;Grady：以内容'==Ralasafe功能== 从某种意义来说，Ralasafe给权限管理领域带来一种全新思考。它是从业务功能角度出发，并非从编程角度出发；提供...'创建新页面&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Ralasafe功能==&lt;br /&gt;
从某种意义来说，Ralasafe给权限管理领域带来一种全新思考。它是从业务功能角度出发，并非从编程角度出发；提供最简单实用的API，供开发人员集成到业务系统，将复杂的权限逻辑全部交给Ralasafe；并非提供某种强大而又神奇的模板，或者某些强大而又神奇的权限设置界面。&lt;br /&gt;
&lt;br /&gt;
通过API调用和Ralasafe设计器设计工作，减少很多编程工作。Ralasafe提供的界面完全面向开发人员和IT管理员，因此开发人员还需要为业务系统编写“权限管理”相关界面。（仅仅是界面，不需要在各处业务应用做权限逻辑验证等开发工作）&lt;/div&gt;</summary>
		<author><name>Grady</name></author>	</entry>

	<entry>
		<id>http://wiki.huihoo.com/wiki/Ralasafe/user</id>
		<title>Ralasafe/user</title>
		<link rel="alternate" type="text/html" href="http://wiki.huihoo.com/wiki/Ralasafe/user"/>
				<updated>2011-06-12T14:27:43Z</updated>
		
		<summary type="html">&lt;p&gt;Grady：/* 五分钟快速入门 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Ralasafe]] 参考手册&lt;br /&gt;
&lt;br /&gt;
=安装篇=&lt;br /&gt;
==安装Ralasafe (with demo)[推荐！]==&lt;br /&gt;
[[Ralasafe/user/install with demo|with demo]]&lt;br /&gt;
&lt;br /&gt;
==安装Ralasafe (without demo)==&lt;br /&gt;
[[Ralasafe/user/install without demo|without demo]]&lt;br /&gt;
&lt;br /&gt;
=五分钟快速入门=&lt;br /&gt;
[[Ralasafe/user/hello world|hello world]]&lt;br /&gt;
&lt;br /&gt;
=基础篇=&lt;br /&gt;
==基础概念==&lt;br /&gt;
==权限数据来源==&lt;br /&gt;
==权限模型及权限设置==&lt;br /&gt;
==用户分类==&lt;br /&gt;
==数据查询==&lt;br /&gt;
==业务数据分类==&lt;br /&gt;
==便捷人性化操作==&lt;br /&gt;
=测试篇=&lt;br /&gt;
=集成篇=&lt;br /&gt;
==与应用系统集成==&lt;br /&gt;
==Ralasafe API讲解==&lt;br /&gt;
=部署篇=&lt;br /&gt;
==完整部署（权限引擎+管理端）==&lt;br /&gt;
==部分部署（权限引擎）==&lt;br /&gt;
=高级进阶篇=&lt;br /&gt;
==手工编写规则==&lt;br /&gt;
==案例解析1==&lt;br /&gt;
==案例解析2==&lt;br /&gt;
&lt;br /&gt;
[[Category:Ralasafe]]&lt;/div&gt;</summary>
		<author><name>Grady</name></author>	</entry>

	</feed>