草庐IT

php - 高级访问控制库

coder 2024-04-06 原文

关闭。这个问题是off-topic .它目前不接受答案。












想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。

9年前关闭。




Improve this question




我对为用户执行高级访问控制以访问软件系统内的资源感兴趣。我在医疗保健 IT 工作,年轻的我经常低估 role-based access control in healthcare 的复杂性。 .但是这个问题应该适用于任何有复杂 ACL 要求的人。

很长一段时间php gacl一直是我的首选库,用于处理 Health IT 系统中非常复杂的 ACL 控制问题。但我现在更多地使用 javascript,尤其是 Node 。我已经在 npm 中搜索库以通用方式进行访问控制。

我希望支持定义操作而不仅仅是用户和资源(3 层而不是 2 层),并且我希望拥有用户、操作和资源组,并且暗示我希望拥有 ACL 继承。

来自the Star Wars themed manual的经典例子该库的规则如下:

  • 机组人员的所有成员都可以(访问、配置和使用)访问
    枪,引擎,驾驶舱和休息室,期待咀嚼。
  • 所有机器人都可以(访问和使用)驾驶舱,但只有 R2D2 有
    配置对引擎的访问。
  • 汉拥有所有类型的访问权限
    资源类型。

  • 这里的基本概念包括您可以制定适用于用户组(即机组人员、乘客或机器人)或个人(Han 和 Chewie)的规则,您可以拥有不同类型的访问权限(访问、配置、使用) 或访问组(维护访问 = 配置 + 维修 + 使用)对不同资源(引擎和驾驶舱)也可以分组,(战斗站 = 驾驶舱 + 枪支)。

    这允许使用相对简单的基于组的管理来配置极其复杂的访问控制规则。

    到目前为止,除了 php-gacl 之外,我还没有看到任何类似的东西。我看过一些很棒的基于 javascript 的 ACL 项目,所有这些项目都宣传简单和易用,而不是全面。这也适用于其他典型的 php ACL 库(即 Zend ACL)

    有人在为 Node 开发“高级 ACL”项目吗?我应该在某个地方寻找更好的方法吗?

    php-gacl 包含三个部分,一个是基于 php 的管理 GUI(无可否认过于复杂),以及一个用于 CRUD 规则的 API(我认为可以轻松转换为 REST 接口(interface))和一个非常小的提供 ACL 检查功能的文件。

    从技术上讲,只有最后一种类型需要完全移植到 Node 才能使该软件模型正常工作?

    在更深层次上,我想了解已成功使用哪些方法来处理此问题。这个问题一般是怎么解决的?那些在 node/javascript 甚至特定数据库方法(关系与非关系)方面有效讨论这个问题的人的奖励积分。我知道这样做对/错有很多理论基础(即对 RBAC 与 ACL 有很多意见)。我想要的是理论上可靠的东西,或者从图书馆的 Angular 来看仍然“正常工作”的几乎可靠的东西。我专注于 Javascript,但了解其他语言如何实际解决这个问题会很好。

    最佳答案

    如果您可以避免使用任何类型的 ACL,通常情况会更好。它们管理起来很复杂。您最好对三个级别的安全检查进行建模:

  • URL/IP 地址/或其他接入点安全检查
  • 资源检查时的方法。无论您想修改或操纵什么实体,您都可以对其进行权限检查。 IE。业务规则类型的访问。
  • 实体资源检查。如果用户/API/OAuth token 完全可以访问实体

  • 这可以使用 RBAC 来完成。您的组织/站点的每个 Angular 色都分配有一组访问/修改/操作权限。用户被分配一个 Angular 色,但三个级别的检查检查权限,而不是 Angular 色。

    我会将 Spring Security 和 RBAC 视为谷歌搜索,并以此为模型。以下是我发现有用的一些链接:

    http://www.xaprb.com/blog/2006/08/16/how-to-build-role-based-access-control-in-sql/

    http://www.xaprb.com/blog/2006/08/18/role-based-access-control-in-sql-part-2/

    (因为 Spring Security 中的所有“原始”示例和疯狂命名的检查,建议您阅读提供替代名称使用和 Spring 权限“hasRole()”检查用途的文章。以下文章在RBAC 的设计)

    http://springinpractice.com/2010/10/27/quick-tip-spring-security-role-based-authorization-and-permissions/

    (关于灵活使用 Spring Security,包括 RBAC 的一个很好的介绍)

    http://www.infoq.com/presentations/Spring-Security-3

    (下面给出了 RBAC 问题和解决方案的 GOOD 描述,并且是为 PHP 设计的)

    http://www.tonymarston.net/php-mysql/role-based-access-control.html

    带有 RBAC 实现的 PHP 框架:

    http://trac.symfony-project.org/wiki/UserRbac

    最后是 Spring Security 的类图。您会注意到它允许将安全信息放在 PARALLEL 表中,以供 protected 实体使用。这是设计使然,以便稍后可以添加、删除或替换 Spring Security。但这也意味着更多的 table 。

    http://code.google.com/p/uclm-esi-alarcos/source/browse/trunk/documentation/memoria-pfc/Figuras/Cap5/spring-security-class-diagram.png?r=295

    关于php - 高级访问控制库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14107597/

    有关php - 高级访问控制库的更多相关文章

    1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

      类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

    2. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

      我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

    3. ruby - 续集在添加关联时访问many_to_many连接表 - 2

      我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

    4. Ruby Readline 在向上箭头上使控制台崩溃 - 2

      当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby​​安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少

    5. ruby-on-rails - 带 Spring 锁的 Rails 4 控制台 - 2

      我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.

    6. ruby-on-rails - openshift 上的 rails 控制台 - 2

      我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新ruby​​gems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems

    7. C51单片机——实现用独立按键控制LED亮灭(调用函数篇) - 2

      说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时

    8. ruby-on-rails - 在 Rails 控制台中使用 asset_path - 2

      在我的Character模型中,我添加了:字符.rbbefore_savedoself.profile_picture_url=asset_path('icon.png')end但是,对于数据库中已存在的所有角色,它们的profile_picture_url为nil。因此,我想进入控制台并遍历所有这些并进行设置。在我试过的控制台中:Character.find_eachdo|c|c.profile_picture_url=asset_path('icon.png')end但这给出了错误:NoMethodError:undefinedmethod`asset_path'formain:O

    9. ruby - 有没有办法从 ruby​​ case 语句中访问表达式? - 2

      我想从then子句中访问c​​ase语句表达式,即food="cheese"casefoodwhen"dip"then"carrotsticks"when"cheese"then"#{expr}crackers"else"mayo"end在这种情况下,expr是食物的当前值(value)。在这种情况下,我知道,我可以简单地访问变量food,但是在某些情况下,该值可能无法再访问(array.shift等)。除了将expr移出到局部变量然后访问它之外,是否有直接访问caseexpr值的方法?罗亚附注我知道这个具体示例很简单,只是一个示例场景。 最佳答案

    10. ruby - 从外部访问类的实例变量 - 2

      我理解(我认为)Ruby中类变量和类的实例变量之间的区别。我想知道如何从该类外部访问该类的实例变量。从内部(即在类方法中而不是实例方法中),它可以直接访问,但是从外部,有没有办法做MyClass.class.[@$#]variablename?我没有任何具体原因要这样做,只是学习Ruby并想知道是否可行。 最佳答案 classMyClass@my_class_instance_var="foo"class上述yield:>>foo我相信Arkku演示了如何从类外部访问类变量(@@),而不是类实例变量(@)。我从这篇文章中提取了上述内

    随机推荐