Angular中的复杂用户权限

时间:2014-06-02 21:41:52

标签: javascript angularjs security authentication permissions

我正试图隐藏并显示我的角度应用程序的部分(我会担心以后保护路线)

我遇到的问题是,后端正在返回数据库特定方面的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"
]
}

1 个答案:

答案 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。