我试图测试登录的用户是否具有适当的角色来查看仪表板中的某些项目。
我有一个对象数组。 以下是用户可能看到或可能看不到的项目:
items: [
{ title: 'Guide', icon: '$guide', component: 'Guide', claims: '', size: '', roles: ['superAdmin', 'admin', 'pastor'] },
{ title: 'Courses', icon: '$courses', component: 'Course', claims: '', size: '', roles: ['superAdmin', 'admin', 'pastor'] },
{ title: 'Sections', icon: '$sections', component: 'Sections', claims: '', size: '', roles: ['superAdmin', 'admin'] },
{ title: 'Units', icon: '$units', component: 'Units', claims: '', size: '', roles: ['superAdmin', 'admin'] },
{ title: 'Groups', icon: '$groups', component: 'Groups', claims: '', size: '', roles: ['superAdmin', 'admin', 'pastor'] },
{ title: 'Users', icon: '$users', component: 'Users', claims: '', size: '', roles: ['superAdmin', 'admin', 'pastor'] },
{ title: 'FAQ', icon: '$faq', component: 'FAG', claims: '', size: '', roles: ['superAdmin', 'admin', 'pastor'] },
]
和一个管理对象。 这是用户及其权限角色:
cid: (...)
email: (...)
emailVerified: (...)
fullPath: (...)
id: undefined
roles: Array(2)
0: "member"
1: "pastor"
下面是我的代码:
const hasRole = this.items.filter(val => this.admin.roles.includes(val.roles))
return hasRole
这段代码不再起作用了,因为items.roles以前只是一个字符串,但是我现在把它变成了一个角色数组。
我试过多种组合,但还是很难弄清楚。
使用array.some()
测试数组中的任何元素是否满足条件。 在这种情况下,条件是元素是否在另一个数组中找到。
const hasRole = this.items.filter(val =>
this.admin.roles.some(role => val.roles.includes(role))
)
return hasRole
如果应包括this.admin
对象中的所有角色,则改为Array.Every()
,以产生肯定的结果。
我看已经有解决办法了,反正我发帖也是我的。 如果要筛选数组并只获取具有指定角色的项,则可以尝试以下操作:
null
let items= [
{ title: 'Guide', icon: '$guide', component: 'Guide', claims: '', size: '', roles: ['superAdmin', 'admin', 'pastor'] },
{ title: 'Courses', icon: '$courses', component: 'Course', claims: '', size: '', roles: ['superAdmin', 'admin', 'pastor'] },
{ title: 'Sections', icon: '$sections', component: 'Sections', claims: '', size: '', roles: ['superAdmin', 'admin'] },
{ title: 'Units', icon: '$units', component: 'Units', claims: '', size: '', roles: ['superAdmin', 'admin'] },
{ title: 'Groups', icon: '$groups', component: 'Groups', claims: '', size: '', roles: ['superAdmin', 'admin', 'pastor'] },
{ title: 'Users', icon: '$users', component: 'Users', claims: '', size: '', roles: ['superAdmin', 'admin', 'pastor'] },
{ title: 'FAQ', icon: '$faq', component: 'FAG', claims: '', size: '', roles: ['superAdmin', 'admin', 'pastor'] },
]
let admin = {
roles: {
0: "member",
1: "pastor"
}
}
let filtered = {}
for(role in admin.roles){
itemsWithSpecificRole = items.filter(val => val.roles.includes(admin.roles[role]))
Object.assign(filtered, itemsWithSpecificRole)
}
console.log(filtered)