欢迎大家赞助一杯啤酒🍺 我们准备了下酒菜:Formal mathematics/Isabelle/ML, Formal verification/Coq/ACL2, C++/F#/Lisp
Ralasafe/user/hello world
目录 |
Ralasafe功能
从某种意义来说,Ralasafe给权限管理领域带来一种全新思考。它是从业务功能角度出发,并非从编程角度出发;提供最简单实用的API,供开发人员集成到业务系统,将复杂的权限逻辑全部交给Ralasafe;并非提供某种强大而又神奇的模板,或者某些强大而又神奇的权限设置界面。
通过API调用和Ralasafe设计器设计工作,减少很多编程工作。Ralasafe提供的界面完全面向开发人员和IT管理员,因此开发人员还需要为业务系统编写“权限管理”相关界面。(仅仅是界面,不需要在各处业务应用做权限逻辑验证等开发工作)
查询权限
场景举例:总公司用户查询所有员工;北京分公司用户只能查询北京分公司及下属子公司员工;海淀营业部用户只能查询海淀营业部员工。
Ralasafe的查询API,可以满足以上场景:
//返回QueryResult对象, //通过QueryResult.getData()获取查询值Collectio<定制的ViewObject/Javabean> org.ralasafe.Ralasafe.query(int privilegeId, User user, java.util.Map context);
通过API告诉Ralasafe当前是谁(User user),打算进行什么操作(int privilegeId,也相当于请求查询什么数据)。API本身并不包含任何权限信息。这种层级查询权限,交由Ralasafe设计器解决。Ralasafe设计器设计权限策略。当应用程序调用Ralasafe API的时候,将由Ralasafe专业引擎解析权限策略,并进行数据库查询,返回查询结果。以下是该场景设计权限策略:
[插入图片]
Ralasafe同时还提供了分页查询和自定义查询API。
package org.ralasafe; import org.ralasafe.entitle.QueryResult; ... public class Ralasafe { //分页查询 public static QueryResult query(int privilegeId, User user, java.util.Map context, int first, int max); //自定义条件查询 public static QueryResult query(int privilegeId, User user, java.util.Map context, CustomizedWhere where); //自定义条件并分页查询 public static QueryResult query(int privilegeId, User user, java.util.Map context, CustomizedWhere where, int first, int max); } ... package org.ralasafe.entitle; public class QueryResult { //查询结果记录数 public int getTotalCount(); }
决策权限
场景举例:ATM机取款每次取款额不能超过¥5000,每天取款总额不能超过¥20000。 Ralasafe的决策API,可以满足以上场景:
//返回Decision对象,通过Decision.isPermit()获知是否有操作权限; // 通过Decision.getDenyReason()获知拒绝理由 org.ralasafe.Ralasafe.permit(int privilegeId, User user, java.lang.Object businessData, java.util.Map context);
通过API告诉Ralasafe当前是谁(User user),打算进行什么操作(int privilegeId),操作数据是什么(Object businessData)。API本身并不包含任何权限信息。这种决策权限,交由Ralasafe设计器解决。Ralasafe设计器设计权限策略。当应用程序调用Ralasafe API的时候,将由Ralasafe专业引擎解析权限策略,并返回决策结果。以下是该场景设计权限策略:
[图片]
小结
Ralasafe的API非常简洁易懂,而且Ralasafe的图形界面设计出的权限策略,也非常简洁易懂。这样不仅有助于开发人员集成Ralasafe,而且有助于向客户说明系统安全状况到底如何。
Ralasafe的图形设计,不仅减少了很多开发工作量;在权限需求发生变动的时候,有助于快速更改。