Ralasafe配置手册

Ralasafe访问控制(权限管理)中间件的配置工作非常少。因为项目发起人非常讨厌配置。因此,“己所不欲,勿施于人”,Ralasafe的配置也非常少。

Ralasafe配置工作只有3个:

  1. 数据源配置
  2. 用户元数据配置
  3. web.xml配置策略XML文件存储路径

权限逻辑配置,使用Ralasafe web控制端在线图形化设计,无需手工配置。

Ralasafe将来可能会采取图形化方式处理前面提到的3种配置工作。但现在还是让我们先熟悉一下配置工作吧。

数据源配置

 

配置入口

Ralasafe不仅强调权限与业务解耦合,也强调权限数据与业务数据解耦合,独立保存。

Ralasafe数据源的入口是WEB-INF/ralasafe/datasources.xml文件,里面配置2个数据源。

  1. 其中1个是name=“ralasafe”的权限数据源,该数据源里面将保存权限数据。configFile属性指该权限数据源的详细配置信息,名称随意,但对应的文件必须也在WEB-INF/ralasafe目录下;
  2. 另1个是业务数据源,name属性自定义,只要不等于“ralasafe”即可。configFile属性指该业务数据源的详细配置信息,名称随意,但对 应的文件必须也在WEB-INF/ralasafe目录下。schema属性可选(可以有,也可以没有),该属性表示在数据查询页面显示数据源哪几个 schema的表和视图。

下面是ralasafe demo自带的数据源配置信息:

<?xml version="1.0"?>
<datasources>
<datasource name="ralasafe" configFile="ralasafe-db.properties"/>
<datasource name="app" configFile="app-ds.properties"        
                            schemas="mydemo,ralasafe"/>
</datasources>

表示2个数据源:ralasafe和app。ralasafe数据源配置信息在ralasafe-db.properties文件里面;

app数据源配置信息在app-ds.properties里面;在设计数据查询页面,指显示mydemo和ralasafe两个schema里面的表和视图。

如下截图是,进入Ralasafe web控制端的查询设计界面,显示的数据库表和视图信息:

如果,我将datasources.xml配置文件的schemas改成schemas=“mydemo”。将只显示mydemo里面的数据表和视图,不显示ralasafe里面的表和视图。

详细配置信息

前面讲到的configFile里面提到的配置文件,又如何配置数据源呢?Ralasafe又支持几种配置方式的数据源呢?

Ralasafe支持3种方式配置数据源,且3种配置方式,都随发行包提供了示例。这些示例就是在WEB-INF/ralasafe目录下的ralasafe-db.properties,jndi.properties和method.properties。 下面详细叙述它们。

DBCP数据源

ralasafe-db.properties就是DBCP(http://commons.apache.org/dbcp/)数据源配置示例,Ralasafe将按照配置信息启动一个DBCP数据源。

配置参数有jdbc驱动、用户名、密码和url等。配置参数与DBCP一致。

jdbcDriver=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost/ralasafe?useUnicode=true
jdbcUser=root
jdbcPassword=1234
connectionPoolMaxSize=5
connectionPoolMaxIdle=2
connectionPoolMaxWait=60000
connectionPoolMinSize=0

JNDI数据源

JNDI数据源在Java EE程序里面非常常见。Ralasafe使用JNDI数据源,配置参数非常简单。

写上type=jndi,然后配上jndi的名称即可。

以下是配置示例:

type=jndi
jndiName=jdbc/datasourceName

通过方法调用获取数据源

假如,你的数据源需要通过调用API暴露(当然,我承认这种情况非常少)。当初,我是这么想的:或许有一种数据源我没用考虑到。那么就通过某个java方法调用获取吧。

假如你有这样的API:

public javax.sql.DataSource com.your.company.db.DatasourceProvider.getDatasource();

那么对应的配置就是:

type=method
class=com.yourcompany.db.DataSourceProvider
method=getDatasource

创建基本权限数据库表

当权限数据源配置好后,你还需要在权限数据库执行如下脚本,创建基础权限数据表。

-- ralasafe schema
CREATE TABLE ralasafe_sequence (
currentValue int,
name varchar(100) NOT NULL,
PRIMARY KEY( name )
);
CREATE TABLE usertype (
name varchar(100) NOT NULL,
description varchar(500),
userMetadataXML varchar(4000),
PRIMARY KEY(name)
);
CREATE TABLE application (
name varchar(100) NOT NULL,
description varchar(500),
PRIMARY KEY(name)
);
CREATE TABLE applicationusertype (
appName varchar(100) NOT NULL,
userTypeName varchar(100) NOT NULL,
userMetadataStr varchar(1000),
PRIMARY KEY(appName, userTypeName)
);

以上脚本,也随发行包提供,文件名称是sql/create-database.sql。

用户元数据配置

用户元数据的目的,就是为了说明当前应用系统的用户信息保存在哪里,有哪些字段,对应的业务意义是什么。

在Ralasafe权限策略里面,钻取用户属性,我们使用业务意义的名称,而不是数据库列字段名称。

你可以在本地配置好用户元数据文件,然后通过Ralasafe web控制端安装。安装方法为,首先登陆Ralasafe web控制端,比如:http://localhost:8080/demo/ralasafe/designer.rls,在左侧“架构师”一栏中选择【用户元数据】菜单;接着在“用户元数据”页面中,填写描述,并选择对应的用户元数据文件;最后,点击【Submit】按钮,系统将开始安装用户元数据。操作过程如下图所示:

当用户元数据被顺利安装后,会在权限数据库生成 9 张表:

ralasafe_businessdata,ralasafe_decision_entitlement,ralasafe_privilege,ralasafe_query,ralasafe_query_entitlement,ralasafe_ralasafe_userrole,ralasafe_role,ralasafe_roleprivilege 和ralasafe_usercategory。和前面手工创建的4张表一起,权限数据库应该共有 13 张表。如果没有 13 张表,说明安装用户元数据过程失败,需要重新安装。

Ralasafe 1.1-版本还有ralasafe-backup表。该表在1.2+版本不再使用。

如下是Ralasafe demo应用的用户元数据配置信息:

<?xml version="1.0"?>
<user>
	<table ds="app" name="mainTable" sqlName="UserView"
		uniqueFields="loginName">
		<field name="id" columnName="id" sqlType="int" javaType="java.lang.Integer" />
		<field name="name" columnName="name" sqlType="varchar(40)"
			javaType="java.lang.String" displayName="Name" show="true" />
		<field name="companyName" columnName="companyName" sqlType="varchar(100)"
			javaType="java.lang.String" displayName="Company" show="true" />
		<field name="loginName" columnName="loginName" sqlType="varchar(40)"
			javaType="java.lang.String" />
		<field name="password" columnName="password" sqlType="varchar(40)"
			javaType="java.lang.String" />
		<field name="isManager" columnName="isManager" sqlType="int"
			javaType="java.lang.Boolean" />
		<field name="companyId" columnName="companyId" sqlType="int"
			javaType="java.lang.Integer" />
		<field name="departmentId" columnName="departmentId" sqlType="int"
			javaType="java.lang.Integer" />
		<field name="companyLevel" columnName="companyLevel" sqlType="int"
			javaType="java.lang.Integer" />
	</table>
</user>

如上配置表示:

  1. 用户表在app数据源下,表名称是sqlName=“UserView”;
  2. name=“mainTable”是目前固定写法,不能改变,在后继版本会引入新的意义;
  3. 这个表的unique fields是”loginName”,如果有多个字段(如loginName,companyId)确定唯一用户,中间用逗号隔开即可。这里填写的是字 段必须在field元素里面有配置,而且填写的是field name属性值,而不是columnName属性值;
  4. field元素表示用户表的字段,每个字段的数据库列字段名称是什么(columnName属性),对应的业务意义是什么(name属性);
  5. 其中有2个业务意义字段是必须的:id和name,分别代表用户唯一id和用户名称;
  6. field的show=“true”表示该字段在页面显示,displayName属性表示该字段在页面显示名称(测试权限策略的时候,比如测试某用户查 询订单权限时,Ralasafe弹出的选择选择用户对话框,将显示show=”true”的用户字段,各个字段的title就是 displayName)。

弹出用户选择对话框截图:

注:

  1. 用户元数据配置支持数据库表和数据库视图。如果你的用户信息分散在多个表里面,你只要创建一个视图将用户各个字段统一到视图里面,然后在table的sqlName属性设置为你新创建的视图。
        
       Ralasafe demo的用户信息被统一到视图里面:
       create or replace view userview as select d."ID",d."LOGINNAME",d."NAME",d."PASSWORD",d."COMPANYID",d."DEPARTMENTID",d."ISMANAGER",
       d."HIREDATE",c.companylevel,c.name as companyName from demouser d, company c
       where d.companyid=c.id;
        
  2. 如果你的用户表没有id字段,但有一个唯一字段,那么可以将该字段等同于id字段设置到id里面。如:数据列myname是唯一字段,那么id字段可以设置为<field name=“id” columnName=“myname”….
  3. 如果你的用户表没有id字段,同时有多个唯一字段组合,那么你应该创建视图“做出”一个逻辑id字段,然后设置到id里面。如数据列mynamecompanyId是唯一字段组合,可以创建视图
    CREATE VIEW myview AS SELECT myname||companyId AS userId...

XML文件存储路径配置

因为各个数据库之间平台移植,大字段往往造成很大困难。所以,我们干脆将XML文件存在文件系统里面,就不存放在数据库里面。这样移植就方便很多;Ralasafe也多了一项配置工作——XML文件存储路径。

打开WEB-INF/web.xml,找到如下代码行:

	<servlet>
		<servlet-name>ralasafe</servlet-name>
		<servlet-class>org.ralasafe.servlet.RalasafeController</servlet-class>
		<init-param>
			<param-name>repositoryDir</param-name>
			<param-value>/home/julian/workspace/ralasafe/xml</param-value>
		</init-param>
		<init-param>
			<param-name>secured</param-name>
			<param-value>false</param-value>
		</init-param>
		<load-on-startup>4</load-on-startup>
	</servlet>

设置repositoryDir的参数值为你存放XML存储路径的地方,如:d:/yourproject/xml等。等安装往用户元数据后,系统会自动在该目录下生成一些目录。目录结构是:

${repositoryDir}
       |____ralasafe
                  |____businessData
                  |____query
                  |____userCategory
                  |____usertype

该配置也支持相对目录,只要new File(${repositoryDir})能找到对应目录即可。详情参考:论坛文章:配置repositoryDir的相对路径

posted @ 2013-07-23 13:21  skyme  阅读(2986)  评论(0编辑  收藏  举报