0

我正在开发一个小型网站。它有一个产品页面,用户可以在其中通过一些导出、上传等操作执行 CRUD 功能。我正在表格中配置页面级别的操作。操作类似于 ProductView、ProductDetailsView、ProductInsert、ProductUpdate、ProductDelete、ProductExport、ProductUploadViaFile 等。

我正在根据页面上的操作级别开发角色。像 Role1 具有菜单 Product.php 的权限,并且在该页面上具有 ProductView 和 ProductInsert 的操作权限。假设 user1 具有角色 Role1。

当 user1 进入页面 Product.php 然后我正在检查它的操作权限。如果他有 ProductView,我将向 user1 显示产品表。我发现代码在 javascript/php 级别中几乎是硬编码的。喜欢

foreach($useractions in $useraction){
   if($useraction == 'ProductView'){
      //show the product page....
   }
   if($useraction == 'ProductInsert')
   {
     //show create button
   }
}

看起来当有操作级别权限时,我必须创建更多代码。同样,在另一个动作插入的情况下,我必须再次更改 UI 级别的编码。我希望有更好的方法来做到这一点。任何建议都会有很大帮助。

4

1 回答 1

0

您希望从应用程序中外部化授权逻辑,以便:

  1. 您不必一直重写授权代码
  2. 您可以独立维护授权

该领域的主要标准是 XACML,即可扩展访问控制标记语言。查看 OASIS XACML网页Wikipedia了解更多信息。

XACML 为您提供了执行点 (PEP) 或拦截器的概念。该 PEP 与授权引擎或策略决策点 (PDP) 联系。PDP 考虑其政策并最终做出决定(允许或拒绝)。

例如:

  1. PEP 询问:用户 Alice 可以查看产品页面吗?
  2. PDP 查看其政策并发现经理可以查看产品页面。它检索 Alice 的角色并看到 Alice 是经理。
  3. PDP 得出“是”许可并将其返回给 PEP。

我希望这有帮助。

于 2013-09-19T19:05:47.763 回答