首页 > > > 前后端分离模式下的权限设计方案
阅读本文大概需要 3.6 分钟。
在理解权限控制之前,需要明白两个概念:资源和权限。什么是资源,对于一个系统来说,系统内部的所有信息都可以理解为这个系统的资源。页面是资源、数据是资源、按钮是资源、图片是资源、甚至页面上一条分割线也可理解为是这个系统的资源。
而权限就是访问某个资源所需要的标识。无论系统的权限如何设计,在用户登录时,都可以计算得出用户所拥有的权限标识集合,也就确定了该用户能访问哪些系统资源,这就是我理解的权限控制的本质。于是我们可以得出:权限控制是控制登录用户对于系统资源的访问。
在弄清前后端在权限控制中各自的职责是什么之前,需要理解前后端各自在系统中的职责。这个还是很好理解:
<组件 permissionName='xxx' />
let hasPermission = permission.check(current.permissionName);
<div className={styles.content}>
{hasPermission ? children : <Exception type={403}/>}
</div>
<BirdButton permissionName={'sys'} type='primary'>测试按钮</BirdButton>
public class SsoAuthorizeInterceptor extends HandlerInterceptorAdapter {
@Autowired
private TicketHandler ticketHandler;
@Autowired
private SsoAuthorizeManager authorizeManager;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (!(handler instanceof HandlerMethod)) return false;
HandlerMethod handlerMethod = (HandlerMethod) handler;
SsoAuthorize authorize = handlerMethod.getMethodAnnotation(SsoAuthorize.class);
if (authorize != null) {
TicketInfo ticketInfo = ticketHandler.getTicket(request);
if (ticketInfo == null) {
throw new UnAuthorizedException("用户信息已失效.");
}
String[] requirePermissions = authorize.permissions();
if(requirePermissions.length==)return true;
boolean isCheckAll = authorize.isCheckAll();
UserPermissionChecker permissionChecker = authorizeManager.getUserPermissionChecker();
if(!permissionChecker.hasPermissions(ticketInfo.getUserId(),requirePermissions,isCheckAll)){
throw new ForbiddenException("用户没有当前操作的权限.");
}
}
return true;
}
}
https://github.com/liuxx001/bird-front
https://github.com/liuxx001/bird-front/blob/master/doc/bird-selector.md
https://github.com/liuxx001/bird-front/blob/master/doc/bird-grid.md
https://github.com/liuxx001/bird-front/blob/master/doc/bird-tree-grid.md
https://github.com/liuxx001/bird-front/blob/master/doc/bird-tree.md
https://github.com/liuxx001/bird-front/blob/master/doc/bird-form.md
https://github.com/liuxx001/bird-front/blob/master/doc/bird-button.md

往期精彩回顾
Java 8中Stream API的这些奇技淫巧!你都Get到了吗?

朕已阅 
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69902700/viewspace-3134760/ ,如需转载,请注明出处,否则将追究法律责任。