前端的权限控制

1.为什么做前端权限控制?
    
    如果仅从技术实现的角度讲,确实只在后端做控制就足够了,但在实际项目中,前端权限控制也有其不可或缺的作用,主要体现为三点:
    
        (1)提升突破权限的门槛
        
                前端权限控制是系统安全的排头兵,虽然不是主力,但起码手动输 url、控制台发请求、开发者工具改数据这种级别的入侵可以防范掉
        
        (2)过滤越权请求,减轻服务端压力
        
                为了省钱,不该发的请求干脆就让他发不出去,带宽都是钱买的
                
        (3)提升用户体验
        
                从用户体验角度出发,一个设计优良的系统理应根据权限为每个用户展现特定的内容,避免在界面上给用户带来困扰。
                
2.前端权限控制具体指什么?

    (1)路由方面:用户登录后只能看到自己有权访问的导航菜单,也只能访问自己有权访问的路由地址,否则将跳转 4xx 提示页;

    (2)视图方面:用户只能看到自己有权浏览的内容和有权操作的控件;

    (3)最后再加上请求控制作为最后一道防线,路由可能配置失误,按钮可能忘了加权限,这种时候请求控制可以用来兜底,越权请求将在前端被拦截。

3.怎么做前端权限控制?
        
    (1)知道用户拥有哪些权限,所以用户登录后第一件事是获取权限数据。权限数据至少应该包括路由权限和资源权限。
    
            *路由权限顾名思义,就是用户可访问的路由集合,以此作为设置前端路由和生成导航菜单的依据;
            
            *资源权限是用户可访问的资源集合,资源可以简单理解成用户能够发起的所有请求集合,以此作为视图控制和请求拦截的依据。
            
    
    (2)分别-实现对路由、视图、请求的控制。
        
            路由控制首先要实现动态菜单,这样就可以对常规访问方式进行限制;对于非常规访问方式比如手动修改 url,可以从前端路由处着手做控制。
            路由控制的思路:
                            *初始化即挂载全部路由,每次路由跳转前做校验
                            *单独做一个登录页,登录后带着用户凭据跳转到前端应用
                            *先初始化一个只有登录路由的应用,用户登录后动态添加路由,当然这需要框架提供支持
                            
            视图控制需要实现一个可以在视图层调用的权限验证方法,输入用户期望的权限,输出是否拥有该权限,将调用这个方法的结果,作为界面上需要验证权限的控件或元素显示与否的依据。
            
            请求控制实际上就是为你使用的 HTTP 库实现一个请求拦截器,对将要发起的请求与用户资源权限进行匹配,拦截越权请求。
            值得一提的是对于携带参数的 url,需要先进行模式约定,比如/people/1这个 url 可以在权限中描述为/people/**,那么拦截器中就要先将这种 url 处理成约定后的格式,然后再进行权限验证。

猜你喜欢

转载自blog.csdn.net/FullStackDeveloper0/article/details/85215149