我正试图隐藏并显示我的角度应用程序的部分(我会担心以后保护路线)
我遇到的问题是,后端正在返回数据库特定方面的CRUD权限。基于这些权限,我应该决定如何隐藏和显示UI的元素。但是,从来没有任何直接的一对一映射。
因此,我需要根据各种权限组合决定如何显示UI的各个部分。例如,“显示报告选项卡,如果他们可以”读取“插入订单”或“读取”财务“或”读取“或”创建“拍卖。
然而,这是一个非常小的例子,通常权限要长得多,这只适用于应用程序的一个部分。
我知道我要在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"
]
}
答案 0 :(得分:0)
如果您选择更改系统的权限,这更像是一个建议。
我认为您必须在权限中添加一些层次结构。
我通常会使用模块/操作。 所以一个模块可以有很多动作。 我也没有读取,创建,更新,删除(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。