十年前,我们是如何做权限控制的?如何定义permission?
那时候,我们都基于纯纯的JSP/Servlet做系统,权限的定义依据的是URL。
某个用户(角色)拥有对某个URL的访问权限。
那个时候的URL都长得很像。
http://mydomain.com/channelAAA/edit.do?id=0000
http://mydomain.com/channelBBB/show.do/?id=1111
在这个URL中,包含了三个信息:
- 资源,比如 /channelAAA 或者 /channelBBB
- 操作,比如 edit.do 或者 show.do
- 实例,比如 id=00000
所以说,其实权限的定义无非就是对某个资源的某个实例的某个操作。
后来,我们的权限定义进步了,我们可以利用反射简化一些事情。于是,权限定义到了类里面,比如我们可以放在某个Controller里面。
public UserController {
public BaseResponse showUser(string id){...}
public BaseResponse deleteUser(string id){...}
}
其实,在这个类里,也包含了三个信息:
- 资源,就是类,比如UserController,PaymentController等
- 操作,就是方法,比如 showUser , deleteUser等
- 实例,就是参数,比如 id等
如此看来,其实还是有渊源的。。。
那么今天,我们又如何定义权限呢?Shiro帮我们做了很好的抽象。
资源:操作:实例
所以说,真的是很有渊源的。
if ( SecurityUtils.getSubject().isPermitted("printer:query:lp7200") {
// Return the current jobs on printer lp7200
}