随笔-11  评论-16  文章-1  trackbacks-0

第五章

细粒度数据查询权限

(下)

 

 

上一章讲解通过设计器,设计出数据查询,并在线测试。本章讲解如何快速定制数据查询,如果将业务代码中的if else逻辑判断去掉,如何将这种细粒度的权限集成到业务系统。

 

快速定制数据查询

上章定制了“查询所有员工”数据查询。下面我们通过复制的方式快速定制“查询本分公司及下属营业部员工”和“查询本营业部员工”两个数据查询。

 

打开权限设计器  http://localhost:8080/mydemo/metadmin/designer

按照如下步骤操作,来定制“查询本分公司及下属营业部员工”数据查询:

1.         右击“查询所有员工”,选择弹出菜单中“复制”菜单项;

2.         在弹出的对话框中,名称栏输入“查询本分公司及下属营业部员工”,描述栏输入“分公司用户具有权限查看”,点击“确认”按钮;

3.         点击“查询本分公司及下属营业部员工”,选择“WHERE”标签页,修改WHERE条件;

4.         右击“条件组”,选择“新增条件组”;

5.         修改该条件组的“连接符”为“OR”;

6.         右击刚才新增的条件组,选择“新增 二元条件”;

7.         选择第一个字段为“company.id

8.         右击第二个字段,将该字段类型替换为“用户属性”,并选择“companyId”用户属性;

9.         右击刚才新增的条件组,选择“新增 二元条件”;

10.     选择第一个字段为“company.parentId”;

11.     右击第二个字段,将该字段类型替换为“用户属性”,并选择“companyId”用户属性;

12.     点击“保存”按钮。

 

下图示:(复制数据查询)


下图示:(改变字段类型)


按照如下步骤操作,来定制“查询本营业部员工”数据查询:

1.         右击“查询所有员工”,选择弹出菜单中“复制”菜单项;

2.         在弹出的对话框中,名称栏输入“查询本营业部员工”,描述栏输入“营业部用户具有权限查看”,点击“确认”按钮;

3.         点击“查询本营业部员工”,选择“WHERE”标签页,修改WHERE条件;

4.         右击“条件组”,选择“新增 二元条件”;

5.         选择第一个字段为“company.id

6.         右击第二个字段,将该字段类型替换为“用户属性”,并选择“companyId”用户属性;

7.         点击“保存”按钮。

用户分类

细粒度权限控制,核心问题就是针对不同用户或者不同类型用户,采取不同控制。Metadmin采用用户分类来描述不同用户类型。用户分类在整个业务系统,在各个权限设置时候都可以复用。

 

示例程序,我们要创建三个用户分类:总公司用户、分公司用户和营业部用户。

总公司用户的规则是:用户的机构级别等于1

分公司用户的规则是:用户的机构级别等于2

营业部用户的规则是:用户的机构级别等于3

 

在权限设计器执行如下步骤,完成“总公司用户”用户分类定制:

1.         右击用户分类树形结构根节点,选择“新增 用户分类”;

2.         在弹出对话框里面,名称处输入“总公司用户”;

3.         在变量窗口,定义用户属性值变量companyLevel,将用户属性companyLevel输入该变量;

4.         在变量窗口,定义固定值变量level,其值等于1

5.         在表达式定义窗口,右击根节点,选择“添加Binary表达式”;

6.         第一个变量选择companyLevel,操作符选择“=”,第二个变量选择level

7.         点击“保存”按钮,定制完毕。

 

此时,可以在线测试该用户分类是否有效。点击“测试”标签页,选择用户进行测试。

 

下图示:(定制总公司用户)


 

下图示:(测试总公司用户分类,“柴其贵”测试结果)


 

下图示:(测试总公司用户分类,“李朵朵”测试结果)


 

通过,复制方式快速定制“分公司用户”和“营业部用户”两个用户分类。具体过程在此不做叙述。

细粒度权限设置

Metadmin专业细粒度权限管理中间件,强大优势表现为:

1.         完全将权限逻辑从业务系统中分离出来,且通过界面,引导开发人员配置出权限逻辑;

2.         这些权限逻辑可以在线测试;

3.         采用分类机制,免去了业务系统里面if else判断,并且非常直观地在权限设计器展现出本系统的权限逻辑;

 

按照如下步骤完成最后一步定制过程,(整个过程看起来比较长,熟练后3分钟即可定义完毕):

1.         在“权限”分类栏,新建“查询员工”权限,输入相关信息;

2.         点击“查询员工”权限;

3.         点击“新增”图标,给查询授权,新增3条授权策略,如下图示。

4.         点击“保存”图标。

 

下图示:“查询员工”细粒度授权规则:


 

此时,可以点击“测试查询授权”标签页,选择用户进行测试。

与业务系统集成

一般情况下,开发者会采用String常量形式引用权限,而不是int型权限id

可以点击权限分类栏上面的,“导出”图标,导出常量。将常量保存到业务系统常量类。

 

业务系统,不管是jsp/servlet/manager或者任意其他地方,需要调用该权限,获取当前用户能查询到的员工。调用MetadminService.query( Privilege.QUERY_EMPLOYEE, user, null ),即可获得user能查询到的员工数据集合(java.util.Collection),每个元素类型是org.back.demo.Employee,在设计SQL时输入的映射类。

Metadmin提供了很多查询接口,还有分页、自定义查询和查询数据条数等,详情参加javadoc http://www.metadmin.com/doc/javadoc/index.html

 

posted on 2009-06-21 21:47 细粒度权限管理 阅读(2106) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: