权限控制-页面访问权✅

371 阅读3分钟

权限控制是一种安全机制,用于管理和限制用户对系统资源的访问和操作,它基于用户的身份和角色,在系统中分配不同级别的权限或者许可,以确保用户只能执行其授权范围内的操作,并防止未经授权的访问和滥用。

权限控制一般涉及以下几个方面:

1:页面的访问权

2:按钮的使用权

3:接口API的访问权(后端)

权限控制的实现步骤:

  • 1:确定权限需求:明确系统中的角色、用户和资源,并定义每个角色对资源的访问权限。 角色示例图片:

角色与权限直接从后端接口拿到渲染即可(然后实现基本的增删改查,可以给人赋予角色,也可以赋予权限给角色,完成之后⬇️)

  • 2: 用户认证和授权:实现用户身份验证机制,确保只有经过验证的用户才能访问系统。根据用户的角色和权限,授予相应的访问权限。
  • 3: 权限配置和管理:建立权限配置和管理界面或工具,使管理员能够管理用户角色和权限。这包括创建、修改和删除角色,分配和撤销权限等操作。
  1. (1)把静态路由与动态路由做区分,任何用户都可以访问的页面是静态路由,涉及到权限控制的一律是动态路由,分为静态/动态两个数组(404页面一定要在最后,否则会报错)
  2. 示例代码(在这之前需要做基本的引入):
export const constantRoutes = 
[ { path: '/login',

// 路由懒加载,用到哪个加载哪个

component: () => import('@/views/login/index'),
hidden: true },

{ path: '/404',

component: () => import('@/views/404'), 
hidden: true }, 

{ path: '/', component: Layout

redirect: '/dashboard',

children: [

{ path: 'dashboard', 

name: 'Dashboard',

component: () => import('@/views/dashboard/index'),

meta: { title: '首页', icon: 'dashboard' } }] 
} 
// 404 page must be placed at the end !!! ] 

export const asyncRoutes = [ department, role, employee, approval, attendance, permission, salary, social ]

(2)在获取用户信息的vuex仓库中把用户信息的变量ruturn出去 示例代码:

// 获取用户信息

async getUserInfo(context) { const userInfo = await getUser() console.log(userInfo) context.commit('setUserInfo', userInfo) return userInfo },

3) 在路由前置拦截守卫中做判断
if (!store.getters.userId) { const { roles } = 

await store.dispatch('user/getUserInfo')

const filterRouts = asyncRoutes.filter(item => { return roles.menus.includes(item.name) })

(4)(router/modules/user) 

在user仓库中派发同步任务 

getRouts(state, newRouts) { state.routes = [...constantRoutes, ...newRouts] console.log(state.routes) }

(5)调用user仓库中的方法,拿到筛选过后的对象(路由拦截守卫)


store.commit('user/getRouts', filterRouts) 

// 添加动态路由,把404放在最后面,这个方法有bug,必须加next(to.path),否则刷新会报404,404不放在最后面也会报404

router.addRoutes([...filterRouts,

{ path: '*', redirect: '/404', hidden: true }]) 

next(to.path) 

} else 

{ next() } 

(6)封装getters里面的方法,方便调用(可用可不用)

routes: state => state.user.routes7)在侧边栏模块的vue文件中写入 

computed: { ...mapGetters([ 'sidebar', 'routes' ]), 


-------以上是基本的代码实现示例--------

后续操作可根据实际情况调整

  1. 访问控制列表(ACL)或角色基于访问控制(RBAC):根据系统的复杂性和需求,选择适合的访问控制模型。ACL是基于资源的权限列表,而RBAC是基于角色的权限分配。

  2. 审计和监控:实施审计和监控机制,记录用户访问和操作的日志,以便跟踪和检查安全性问题,并快速响应异常行为。 6. 定期评估和更新:定期评估权限控制策略的有效性,并根据系统需求和演变的威胁环境进行更新和改进。

需要注意的是,实际的权限控制实现可能因具体系统和需求而有所不同,上述步骤提供了一个基本框架,但在实践中可能需要根据具体情况进行适当调整和补充