学习casbin最大的障碍就是它的两个配置文件。很多新手完全一头雾水。这里我们以本地化的权限控制为例,而不是直接访问数据库,方便大家调试和理解。我们在使用casbin的时候需要用到两个配置文件,分别是model.conf和policy.csv。他们分别记录,权限匹配规则又叫模型定义文件model.conf,权限列表又叫策略文件policy.csv。1.模型定义文件model.conf[request_definition]r=sub,obj,act[policy_definition]p=sub,obj,act[role_definition]g=_,_[policy_effect]e=some(where(p.eft==allow))[matchers]m=g(r.sub,p.sub)&&r.obj==p.obj&&r.act==p.act简单解释一下这几个定义的意思:[request_definition]这是关于request的东西定义,分别定义了:访问实体(Subject)、访问资源(Object)和访问方法(Action)这个很容易理解:我们一般这样描述一个请求:哪个用户通过哪个方法请求了某个资源这里:哪个用户→是实体(Subject)是什么方法→是访问方法(Action)某个资源→访问资源(Object)例如:admin用户使用GET方式访问/user/list接口[policy_definition]这是政策的定义。我们还有一个配置文件policy.csv,这里是约束中定义的字段。我们一般这样描述一个权限:谁对某个资源有什么权限这里:谁→是实体(Subject)什么权限→是访问资源的方法(Action)→访问资源(Object)例如:admin组拥有/user/list接口的GET权限[policy_effect]这是policy的定义。我们如何匹配request_definition和policy_definition中定义的资源。不同的需求可以写成不同的方式。这里写下RBAC权限控制的经典方案:e=some(where(p.eft==allow))p.eft代表判定结果。意思是:如果有匹配的策略规则,则通过。[role_definition]这是角色定义。_、_代表角色继承关系中的前一项和后一项,即前一项继承后一个角色的权限。就像编辑权限只有对文章的读写权限,管理员拥有编辑的所有权限,这种继承关系。[matchers]请求和策略的匹配规则。先解释一下:r.obj==p.obj&&r.act==p.act这一段的意思是在匹配的时候,request传过来的obj和我们policygroup里面的obj一定要匹配,对于行为。最后说明一下:g(r.sub,p.sub)g关联了一个角色定义,所以需要满足我们前项的权限才能继承后项的角色。2.策略文件policy.csvp,member,/depts,GETp,member,/depts/:id,GETp,admin,/depts,POSTp,admin,/depts/:id,PUTp,admin,/depts/:id,DELETEg、admin、memberg、super、admin、lili、member在看到.csv文件时应该能够想到它。这是一个特殊的文件。我们很多人从数据库中导出数据就是导出这种格式的文件。所以这部分的内容后面也可以从数据库中读取。这个文件很容易理解,结合前面的模型文件:p是定义资源策略的缩写:谁对某个资源有什么权限g是定义权限组的缩写:谁继承谁的权限
