我们正在用 ASP.NET 构建一个多租户网站,我们必须让每个客户配置自己的安全模型。他们必须能够定义自己的角色,并将用户置于这些角色中。做这个的最好方式是什么?
有很多简单的 page_load 事件示例,其代码如下:
if (!user.InGroup("Admin")
Response.Redirect("/NoAccess.aspx");
但这会对代码中的组和权限进行硬编码。如何使其用户可配置?
我们正在用 ASP.NET 构建一个多租户网站,我们必须让每个客户配置自己的安全模型。他们必须能够定义自己的角色,并将用户置于这些角色中。做这个的最好方式是什么?
有很多简单的 page_load 事件示例,其代码如下:
if (!user.InGroup("Admin")
Response.Redirect("/NoAccess.aspx");
但这会对代码中的组和权限进行硬编码。如何使其用户可配置?
也许将可配置的角色放在一个数据库表中,在其中存储角色和租户,然后将 PagePermissions 放在另一个表中,例如:
Table "Role"
RoleId, TenantId, Role
Table "PagePermissions"
PageId, RoleId
Table "UserRoles"
UserId, RoleId
然后在页面加载中检查用户是否在具有该页面权限的 RoleId 中,例如:
Select PageId FROM
UserRoles UR INNER JOIN PagePermissions PP
ON UR.RoleId = PP.RoleID
WHERE UR.Userid = @UserId AND PP.PageID = @PageId
如果没有返回行,则拒绝该用户。
我将为在配置文件中轻松管理的网站创建一个配置系统。您可以在哪里获得键入的成员并像这样使用。
foreach(var group in ThisPageConfiguration.AcceptedRoleNames)
if (user.IsInRole(group))
...
然后每个客户都可以在他们的配置文件中配置他们的站点......以及您想要配置的所有其他类型的东西。