【问题标题】:User configurable security in multi-tenant ASP.NET website多租户 ASP.NET 网站中的用户可配置安全性
【发布时间】:2009-09-03 19:13:16
【问题描述】:

我们正在用 ASP.NET 构建一个多租户网站,我们必须让每个客户配置自己的安全模型。他们必须能够定义自己的角色,并将用户置于这些角色中。最好的方法是什么?

有很多简单的 page_load 事件示例,其代码如下:

  if (!user.InGroup("Admin")
       Response.Redirect("/NoAccess.aspx");

但这会对代码中的组和权限进行硬编码。如何使其用户可配置?

【问题讨论】:

    标签: asp.net security multi-tenant


    【解决方案1】:

    也许将可配置的角色放在一个数据库表中,在其中存储角色和租户,然后将 PagePermissions 放在另一个表中,例如:

    Table "Role"
    RoleId, TenantId, Role
    
    Table "PagePermissions"
    PageId, RoleId
    
    Table "UserRoles"
    UserId, RoleId
    

    然后在页面加载中检查 User 是否在具有该页面权限的 RoleId 中,例如:

    Select PageId FROM 
    UserRoles UR INNER JOIN PagePermissions PP
    ON UR.RoleId = PP.RoleID
    WHERE UR.Userid = @UserId AND PP.PageID = @PageId
    

    如果没有返回行,则拒绝该用户。

    【讨论】:

    • 是的,我的解决方案只有在每个客户都有自己的应用程序安装时才可用。可能我理解错了……
    • 那么您可以在查询中添加一个应用程序 ID 以将其在客户之间分隔...
    【解决方案2】:

    我将为网站创建一个易于在配置文件中管理的配置系统。您可以在哪里获得输入成员并像这样使用。

    foreach(var group in ThisPageConfiguration.AcceptedRoleNames)
    if (user.IsInRole(group))
    ...
    

    然后每个客户都可以在他们的配置文件中配置他们的站点......以及您想要配置的所有其他类型的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-28
      • 2014-04-08
      • 2020-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多