最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 《看完就懂系列》项目中的权限管理复杂吗?

    正文概述 掘金(南极大冰块)   2021-01-12   401

    写在前面

    什么是权限管理

    简单来说,就是不同的用户具有不同的权限:

    那么如果我们有100个用户,难不成要给他们搞100套权限吗???

    当然不是,用户并不直接对应权限,用户对应的其实是角色

    也就是说:用户对应角色,角色对应权限。如果我们有一百个用户,但是他们等级不同,老板有全部的权限,经理有80%权限,组长有50%权限,职员有20%权限。

    那么其实我们只需要4个角色:老板角色 有全部的权限,经理角色 有80%权限,组长角色 有50%权限,职员角色 20%权限。

    用户只要对应这4个角色即可,不同级别的用户就能有不同的权限了。

    值得注意的是:

    上面的说明可以改成这样:

    权限管理的逻辑图

    文字说明可能有不到位的地方,下面我们来用流程图的形式来更直观的表现一下权限管理的逻辑。

    页面权限逻辑图

    《看完就懂系列》项目中的权限管理复杂吗?

    ★功能权限逻辑图

    《看完就懂系列》项目中的权限管理复杂吗?

    ★数据权限共享逻辑图

    《看完就懂系列》项目中的权限管理复杂吗?

    权限管理的代码实现

    代码实现一般是通过路由拦截请求拦截共同实现,因为不同的项目代码结构可能有所不同,所以如下代码只是思路的一个延展说明,并不能直接拷贝到项目中使用哦~

     // 路由拦截
    
     // name 要前往的路由
     // access 用户权限数组
     // routes 路由列表
     const canTurnGo = (name, access, routes) => {
    	const routePermission = (list) => {
    		return list.some(item => {
    			if (item.children && item.children.length) {
    				return routePermission(item.children)
    			} else if (item.name === name) {
    				return hasAccess(access, item)
    			}
    		})
    	}
    	return routePermission(routes)
     }
     ...
     
     // 请求拦截
     // 在拦截到http状态码非200时调用的方法
     const errorHandler = function(error) {
        const codeMap = {
            200: '服务器成功返回请求的数据',
            201: '新建或修改数据成功',
            202: '一个请求已经进入后台排队(异步任务)',
            204: '删除数据成功',
            400: '发出的请求有错误,服务器没有进行新建或修改数据的操作',
            401: '用户没有权限(令牌、用户名、密码错误)',
            403: '用户得到授权,但是访问是被禁止的',
            404: '发出的请求针对的是不存在的记录,服务器没有进行操作',
            406: '请求的格式不可得',
            410: '请求的资源被永久删除,且不会再得到的',
            422: '当创建一个对象时,发生一个验证错误',
            429: '请求次数超出当天上限',
            500: '服务器发生错误,请检查服务器',
            502: '网关错误',
            503: '服务不可用,服务器暂时过载或维护',
            504: '网关超时',
        }
        const {response} = error
        if (response) {
            // 获取http状态码对应的错误信息
            const errorText = codeMap[response.status] || response.statusText
            // 如果某个状态码要执行特殊操作,则:
            if(status === 403){
                throw new Error(errorText)
            }else{
                throw new Error(errorText)
            }
        } else {
            notification.error({
                description: '您的网络发生异常,无法连接服务器',
                message: '网络异常',
            })
        }
        return
    }
    

    总结

    类似于这种权限管理,最重要的还是考虑问题的思路,有了正确的思路转化为代码就很容易了。

    按照权限-角色-用户的管理方式,后期权限的维护以及增删改查都可以放在前端来处理,后端只要配置一次就可以不再操作了。避免了后端代码在权限管理的逻辑杂乱,不好维护等问题。简单来说,每个权限都有一个唯一的id,用户登录后去判断用户对应的角色是否对应有某权限的id,作为判断用户是否具有某权限的标准。如果新增一个页面,里面有n个功能权限,只需把路由地址以及加入到路由权限表中,把n个功能权限添加到功能权限表中,再给角色分配对应权限即可。

    这种公共的权限管理,每个项目根据不同的需求都有自己的处理方式。另外,权限管理也可以做成公共的组件,新建项目时引入配置即可,此处暂不做讨论了。

    写在后面



    起源地下载网 » 《看完就懂系列》项目中的权限管理复杂吗?

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元