ruby-on-rails - 在 Rails 应用程序中使用 Active Directory/LDAP 组获取权限\角色的示例

标签 ruby-on-rails ruby active-directory permissions ldap

我想知道其他人是如何实现这个场景的。我有一个内部 Rails 应用程序(库存管理、标签打印、运输等)。我正在重写系统的安全性,导致旧方法变得难以维护(用户表、密码、角色)——我使用了 restful_authentication 和角色。它是大约 3 年前实现的。我已经使用 ruby​​-ldap-net 实现了 AuthLogic 来对用户进行身份验证(与我之前与其他框架/语言的挣扎相比,实际上这非常容易)。下一步是角色。我已经在 Active Directory 中定义了组——所以我不想在我的 Rails 应用程序中运行一个单独的角色系统,我只想重用 Active Directory 组——因为系统的那一部分已经被维护用于其他目的(共享驱动器、备份、PC 访问等)

所以我想知道其他人是否有过基于 Active Directory 或 LDAP 中的组在 Rails 应用程序中实现权限/角色的经验。此外,角色要求非常复杂。

这是一个例子:

例如,我有用户属于 AD 中的主管组和库存部门,所以我是该用户能够在库存中运行“高级”任务 - 调整数量,运行报告,但是其他“主管”来自其他部门不应该这样做,高层管理人员也应该能够使用这些报告(无论天气如何,它们是否属于库存),但中层管理人员不能,除非他们在库存组中。系统管理员(域管理员)应该可以不受限制地访问系统,除了人力资源和财务部分,除非他们在人力资源部门(就像你不希望所有系统管理员(除了一个授权的管理员)看到其他人的个人信息员工)。

我看了 acl9、cancan、aegis。我想知道对于基于 AD 的系统访问的这种特殊用途,使用其中一种与另一种相比是否有任何优势/劣势。如果您有好的经验,建议其他系统。

谢谢!!!

最佳答案

ActiveLDAP(DocumentationGithub)具有您正在寻找的一些功能,特别是:

  • 您可以将 LDAP 对象(对象类实例)映射到 Rails 应用程序中的对象。 API 并不完全反射(reflect) ActiveRecord,但它非常容易理解和学习。
  • 显然不可能跨 LDAP 和关系数据库进行联接等操作,但您可以编写一些稍微聪明的代码,使复合数据可以从 ActiveLDAP 对象或 ActiveRecord 对象轻松访问。
  • ActiveLDAP 还提供了写入 LDAP 的方法,允许您从 rails 管理 LDAP 中的用户和角色,消除了在数据库中管理用户表的要求,但是,用户数据库表可能仍然需要存储有关用户的应用特定数据。
  • 此外,您可以将 AuthLogic 与 ActiveLDAP 集成。这是我发现的一种尝试:LDAP Pass-through Authentication with Authlogic and ActiveLdap
  • 然后您可以使用声明式授权 (Pundit) 来处理您的角色和授权。

关于ruby-on-rails - 在 Rails 应用程序中使用 Active Directory/LDAP 组获取权限\角色的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2439906/

相关文章:

ruby-on-rails - 在 Rails 3 的模块内定义范围的最佳方式是什么?

arrays - 如何将 AD 计算机名称传递给数组?

java - LDAP 使用 UPN 在 Active Directory 中搜索用户

ruby-on-rails - railsinstaller 有问题

ruby-on-rails - `AdapterNotSpecified` 数据库未配置

ruby-on-rails - 在 Rails 中使用 rescue

ruby-on-rails - 事件记录正则表达式

Ubuntu 16 - Active Directory - 可以 ssh - 不能 rdp

ruby-on-rails - 如何在使用 devise 和 omniauth-facebook 时指定 facebook 图形 API 版本

ruby-on-rails - 在 Ruby on Rails 中显示类别文章和标签