前言
一般来说,在设计与人有交互的系统时,如果涉及到多用户能对同类资源进行操作的时候,就会有区分权限的需求了。
最简单的例子莫过于普通用户与管理员,两者进行操作的客户端不一致,普通用户可以用专门的 APP 或者小程序进行登陆操作,而管理员却有一个专门的管理后台,能够进行一些影响比较大操作:审核内容、发布公告、退款等等。
而即使是管理员,在管理后台中,也会有不同的权限,比如编辑管理员可以被授权审核内容,而退款却需要财务或者主管之类的管理员才能被授权进行操作。
这里需要强调下,认证(Authentication) 与授权(Authorization) 是两个不同的概念,虽然他们的英文单词很像。
认证的时候,只有能不能登录这种说法,在 Web 程序中对应的是 HTTP Status 401 错误,而授权认证则是登录之后才会进行的操作,对系统内的资源,你是不是有权限进行操作,没有的话对应的是 HTTP Status 403 错误。
权限认证分类
下面我们来说说几种比较流行的权限模型。
ACL
ACL(Access Control List)访问控制列表
这种模型非常简单,即直接将用户与权限进行一一对应
Alice -> read:article, update:article
Bob -> read:article, del:article
通过这张 ACL 表,在程序中可以直接对响应的用户进行权限判断,实现起来也非常简单。权限对应行为+资源
,即每一种权限对应可以对什么资源进行什么样的操作。
在设计 Web 程序中的 RESTful 接口的时候,权限就可以设计为:
Alice -> GET /article, PUT /article
Bob -> GET /article, DELETE /article
只是,这个模型缺点也非常明显:每次在系统中添加新用户的时候,必须给他全部设置一遍权限,非常麻烦,在资源类别少的时候,可以忍受,随着业务的发展,同事越来越多,资源类别也越来越多的时候,管理员的工作就会非常痛苦。
原创文章,作者:网络技术联盟站,如若转载,请注明出处:https://www.sudun.com/ask/49826.html