1

我在 ALFA 中制定了政策,其中:

  • 如果转帐金额大于转帐限额则应拒绝该请求。

我想知道如何指定特定的传输限制。从管理员的角度来看,如果将来我想更新传输限制,应该在哪里以及如何完成?

例如,我想将当前转账限额设置为$2000。如果我愿意,我该怎么做,然后如何更新传输限制?

4

3 回答 3

1

为了补充 David 提到的内容,您可以在数据库单元格中设置此值并离线更新其 ABA/XACML 值(使用您组织中的其他流程)。然后可以在评估时查询该值,方法是告诉您的 PDP是使用 SQL“ ”withdrawalLimit从特定数据库查询的select limit from ....

于 2014-10-16T12:55:17.250 回答
0

所以,这就是 XACML 的优势,因为规则是在策略中定义的,您可以以动态的方式更新访问控制规则。您的 XACML 策略中可能已配置传输限制。您可以通过编辑 XACML 策略使用 更新它。然后必须为 PDP 运行时保留此更新,并根据它切断请求。

ALFA插件将具有更新 XACML 策略属性的简单方法,而不仅仅是更新原始策略。希望你能找到它。但是,如果您更新 XACML 策略,它也会起作用。

于 2014-10-15T09:05:02.817 回答
0

很高兴看到你在进步。在您的情况下,ALFA 中的授权策略如下所示:

namespace com.axiomatics.banking{
    attribute actionId{
        category = actionCat
        id = "actionId"
        type = string
    }
    attribute resourceType{
        category = resourceCat
        id = "resourceType"
        type = string
    }
    attribute amount{
        category = resourceCat
        id = "amount"
        type = double
    }

    /**
     * Policy to transfer money
     */
    policy transferMoney{
        target clause actionId=="transfer" and resourceType=="money"
        apply firstApplicable
        /**
         * Deny access if amount is greater than 2000
         */
        rule checkAmount{
            target clause amount > 2000
            deny
        }
        /**
         * Grant access
         */
        rule allow{
            permit
        }
    }
}

请注意,在我的示例中,我使用否定规则来拒绝访问。这很好,例如,如果我想在该规则中添加AdviceObligation指示拒绝的原因。

现在您的问题与政策结构没有太大关系,而是与属性的值有关。在 XACML 中,您有两种选择。任何一个:

  • 您将值“硬编码”到策略中,或者
  • 您将值外部化并将其放入可能是数据库、Web 服务、LDAP 的策略信息点 (PIP)... 外部化值的好处是您现在可以更新值而无需更改策略. 该政策变得更加通用。这也意味着您可以有特定于用户的限制。

在后一种情况下,您的规则变为:

    /**
     * Deny access if amount is greater than the user's withdrawal limit
     */
    rule checkAmount{
        condition amount > withdrawalLimit
        deny
    }

在 Axiomatics Policy Server 中,您可以配置 PIP / 属性连接器来检索基于用户 ID 的值。

HTH,大卫。

于 2014-10-15T23:21:21.053 回答