元模型 PERM

PERM模型是由4个基础(Policy,Effect,Request,Matchers)描述各个资源和用户之间的相互关系。

Policy

定义访问策略的模型。其实就是定义Policy规则文档中各字段的名称和顺序。
p={sub, obj, act}p={sub, obj, act, eft}

Effect

用于将给定请求与最终结果匹配的策略组合/减少的策略的模型。可以理解为,对Matchers匹配后的结果再进行一次逻辑组合判断的模型。
例如:e = some(where(p.eft == allow))
这句的意思是指,如果匹配策略结果p.eft 存在(some) allow的结果,那么最终结果就为
再看个例子:
e = some(where (p.eft == allow)) && !some(where (p.eft == deny))
这个例子组合的逻辑含义是:如果有匹配出结果为alllow的策略并且没有匹配出结果为deny的策略则结果为,换句话说,就是匹配的策略都为allow时才为,如果有任何deny,都为 (更简单的说当allowdeny同时存在时,deny优先)

Request 请求

定义了请求参数。一个基本的请求是一个元组对象,至少包含subject(访问实体), object(访问的资源)和 action(访问方法)。
r={sub, obj,act}
它其实就是定义了传入访问控制匹配函数的参数名和顺序。

Matchers 匹配规则

Request和Policy的匹配规则。
例如: m = r.sub == p.sub && r.act == p.act && r.obj == p.obj
这条简单又常见的匹配规则的意思就是,请求的参数(实体、资源和方法)都相等即在策略中能找到,那么返回策略结果(p.eft)。策略结果会保存在p.eft中。