比如你去酒店开房你需要拿身份证办理Check in,这是一个认证过程身份证和密码的功效是一样的证明了你是谁,前台给你的房卡表示授权你开302房间你不能用身份证去开别囚房间吧,这就是认证和授权的区别
整个授权过程有2个重要的概念:
我们写了两个api, 分别都需要认证,
这个时候我们来了一个需求,普通用户鈳以查看所有用户但只有管理员可以修改用户,给user加上role [user | admin], 然后在api中判断一下就搞定了,
这个时候我们就把角色(role)做了硬编码假设我们还有一個更新产品的功能,我也一样会判断角色是否是admin但问题是用户可能需要自己管理角色,或者说他说管理员A负责用户管理管理员B负责产品管理,这个时候你就懵b了吧所以我们新建一层抽象,这个时候才引出了scope我们基于scope做授权管理,而role和scope关系开放给用户去设定想明白底层逻辑,这个时候你去看RBAC(Role
接着来考虑一个问题普通用户随便不能随便改其用户信息,但他应该可以改自己的用户信息吧那么普通用戶是否需要user:write的scope呢?
这里假设修改本人信息的api为PATCH /user
或者PATCH /users/me
,那么在这个route需要scope吗实际情况是,每个验证过身份的用户都可以修改自己的用户信息所以就根本不需要scope,
改造后的调用更加简洁,
运行这段代码需要做点配置,
有了decorator的基础就可以了解一下
好不容易摆脱了Spring没想到吧。