【问题标题】:Need some advice on my own Role Based Access Control (RBAC)需要一些关于我自己的基于角色的访问控制 (RBAC) 的建议
【发布时间】:2011-07-04 04:24:38
【问题描述】:

我有一个非常简单的个人资料页面,用户可以在其中上传图片和视频。我已经实现了自己的角色系统,并且没有使用 .NET(我想学习并构建自己的角色系统)。我最多有 10'000 个用户,大约 50-100 个用户同时使用它。

我在处理我的 RBAC 的数据库中有三个表:

角色管理员、用户、经理、访客
权限SendEmail、AdvancedSearch、RemoveUser ...等等。

已授权:在此表中,我将角色映射到权限。每次操作需要权限时,我都会进行检查。如果权限角色在表中,我返回 true 并且操作被授权。

所以,这里有几个关于这个场景的问题。

  • 这是一种轻量级的检查方法吗 授权?通过查询数据库 每个页面加载和操作用户 制作。
  • 我应该把它保存在一个 XML 文件中 更快的结果?
  • 是否有更好的结构 RBAC 之类的?

提前致谢!

【问题讨论】:

    标签: .net database authorization rbac


    【解决方案1】:

    对于 50-100 个用户,我会在应用程序中缓存每个活跃用户的内容。这避免了 db 提取的任何小开销,除非它过期。因此,只需拥有一些可以廉价缓存的小对象,但其中包含运行应用核心功能所需的所有用户信息。

    没有什么可以阻止您使用它来实现 IPrincipal 以使用内置的 [PrincipalPermission(...)] 东西,但自己做也可以。

    【讨论】:

    • “除非过期”...这就是我一开始没有这样做的原因。但如果这成为最受欢迎的答案,我会重新考虑 =)
    • @Niklas - 每隔几分钟查询一次比查询每个请求要好得多...
    • 所以只是为了弄清楚这一点。当用户登录时,我创建一个会话变量,存储允许用户根据其角色做出的每个“权限”。像一个带字符串的数组?
    • @Niklas - 他们登录时不完全;相反,每当您检查缓存(基于您处理身份的方式)并且它不存在时:创建它并缓存它。
    • 最后一个,那我就不打扰了 :P 你能给我一个链接,告诉我如何像你说的那样检查缓存。另外,我已经在使用 User.Identity.Name 所以一个关于如何将其扩展到使用角色的链接 =) 非常感谢!
    【解决方案2】:

    以下是您问题的答案。

    • 这是一种检查授权的轻量级方法吗?通过在用户执行的每个页面加载和操作时查询数据库。

    回答。我将在数据库上应用可配置的缓存系统层,并使用此缓存系统进行具有可自定义到期时间的授权。

    • 我应该将其保存在 XML 文件中以获得更快的结果吗?

    回答。我不喜欢 xml 文件,而是使用序列化。

    • 这种 RBAC 有更好的结构吗?

    回答。就 DB 和 RBAC 的结构而言,应该足够安全,不能直接从 DB 中调和应用程序的访问控制或权限。

    【讨论】:

      猜你喜欢
      • 2014-01-25
      • 2011-03-18
      • 2014-12-26
      • 2015-02-16
      • 2017-02-06
      • 2016-10-08
      • 2012-09-14
      • 2010-09-11
      • 2013-08-28
      相关资源
      最近更新 更多