我正在尝试隐藏和显示我的 Angular 应用程序的部分(我稍后会担心保护路线)
我遇到的问题是,后端正在返回数据库特定方面的 CRUD 权限。根据这些权限,我应该决定如何隐藏和显示用户界面的元素。然而,从来不存在任何直接的一对一映射。
因此,我需要根据各种权限组合来决定如何显示 UI 的各个部分。例如,“如果他们可以“读取”insertionOrder 或“读取”财务”或“读取”或“创建”拍卖,则显示报告选项卡。
但是,这是一个非常小的示例,通常权限会更长,并且仅适用于应用程序的一个部分。
我知道我要在 ng-show 中调用一个函数,我只是不知道如何组织该函数来解释所有这些用例。
非常感谢任何想法。
以下是返回的权限数组的示例:
{
"account": [
"read",
"create",
"update",
"delete"
],
"an_advertiser": [
"read",
"create",
"update",
"delete"
],
"an_insertion_order": [
"read",
"create",
"update",
"delete"
],
"auction": [
"read",
"create",
"update",
"delete"
],
"dashboard": [
"read",
"create",
"update",
"delete"
],
"finance": [
"read",
"create",
"update",
"delete"
],
"input_output": [
"read",
"create",
"update",
"delete"
],
"insertion_order": [
"read",
"create",
"update",
"delete"
],
"publisher": [
"read",
"create",
"update",
"delete"
],
"report": [
"read",
"create",
"update",
"delete"
],
"user": [
"read",
"create",
"update",
"delete"
]
}
最佳答案
如果您选择更改系统的权限,这更像是一个建议。
我认为您必须为权限添加一些层次结构。
我通常使用模块/操作。 所以一个模块可以有很多 Action 。 另外,我没有读取、创建、更新、删除(0:阻止,1:查看,2:可以)。
示例:
{
user: {
module: 2,
create: 2,
edit: 2,
name: 2,
phone: 1,
delete: 2
},
report: {
module: 1,
create: 2,
edit: 0,
reportA: 1,
reportB: 2,
delete: 2
}
}
这样我就可以完全控制所有操作。模块可以是应用程序的某些部分,具有许多操作。或者您可以使用包含所有组件的大模块,然后使用子模块。
由于我使用整数来表示权限,我可以使用简单的 <>=
进行验证标志。
我通常定义一个通用操作,如 module
定义此人是否有权访问整个模块。
function permTo(module, action){
var mod = list[module];
// not validating if module exists.
var max = mod.module;
return Math.min(mod[action], max);
}
现在有了这个permTo('users', 'phone')
会给 1。
现在有了这个permTo('users', 'name')
会给 2。
现在有了这个permTo('report', 'create')
会给出 1,因为模块是 1。
关于javascript - Angular 中的复杂用户权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24003756/