【问题标题】:Roles for white-label service access白标服务访问的角色
【发布时间】:2009-03-31 14:05:14
【问题描述】:

好的,

我知道我做错了什么 - 但想不出更好的方法。 我正在开发一个允许用户设置自己的迷你网站的网站。

有点像宁。 此外,我只有 1 个基本登录名,并且(现在)通过角色提供对每个迷你网站的访问权限。

所以我现在这样做的方式是:

每次创建一个新的迷你网站 - 比如说等等,我都会在我的应用程序中创建 2 个角色。 blah_usersblah_admin

创建迷你网站的用户被赋予角色 - blah_admin,而所有其他想要加入这个迷你网站(或网络)的用户被赋予角色 - blah_user。

任何人都可以查看来自任何网站的数据。但是要添加数据,必须是该迷你站点的成员(必须分配 blah_user 角色)

我面临的问题是,通过使用基于角色的系统,我不得不手动完成大量工作。在 User.IsAunthenticated 属性上工作的 Asp.Net 2 控件现在对我来说基本上没用了,因为除了 IsAuthenticated 属性,我还必须检查用户是否具有正确的角色。

我猜有更好的方法来构建系统,但我不确定如何。 有什么想法吗?

本网站正在 IIS 6 上使用 ASP.Net 2 开发。 非常感谢!

【问题讨论】:

    标签: asp.net architecture asp.net-2.0 roles security-roles


    【解决方案1】:

    恐怕 ASP.NET 的标准角色相关的东西不是你需要的。您可以尝试更改身份验证模块,以便:

    1. 使用 cookie 登录。
    2. 确定访问者的角色。也许您会使用一些特殊的表来对应用户和站点。
    3. 使用枚举的用户角色创建自定义主体,并将身份和主体分配给当前请求。

    我也不认为为每个站点设置特殊角色是个好主意。当你有一百个站点时,你也会有两百个角色。恐怕很难管理。

    当我们解决类似任务时,我们只是没有使用标准控件。我们在所有站点上都使用了一组角色。具体用户的会员资格根据当前站点及其与本站点的关系确定。

    补充:另一种可能的调查是存在于 ASP.NET 身份验证系统中的应用程序。也许可以将每个子站点隔离到单独的应用程序中?

    更新:适用于我们应用程序的方法。

    1. 不要制作大量克隆角色。只使用两个:用户和管理员。如果您的站点是公开的,那么“用户”角色可能只是全局的——一个站点上的用户与另一个站点上的用户没有区别。如果“users”和“everyone”是不同的角色,那么当然“users”也应该绑定到一个站点。

    2. 使用标准 ASP.NET Membership 用户,但不使用标准角色机制。

    3. 建立一种机制来存储站点和用户之间的关系。它可以是包含站点 ID、用户身份和角色的简单表格。

    4. 你必须重写的是 IsInRole 方法。 (确切地说是方法s,我稍后会介绍)。该方法在 IPrinciple 接口中,因此您必须制作自己的主体对象。这很简单。

      1. 这种类型的方法 IsInRole 应该查看当前站点(来自 HttpRequest)查看站点用户表并获取角色
    5. 然后您必须将您的委托人与请求相关联。在 PostAuthenticateRequest 事件中执行此操作。

    6. 还有 RoleProvider。老实说,我不确定何时使用它,但它也有 IsInRole 方法。我们可以用同样的方式覆盖它。但是这个提供者的其他方法更难。例如 AddUsersToRoles。它接受用户名和角色的数组,但是应该将它添加到什么上下文(站点)?到电流?不确定,因为我不知道何时调用此方法。所以它需要一些实验。我看到(Reflector 有帮助)RopePrincipal 本身使用 RoleProvider 来获取角色列表,所以它可能只使用标准主体实现 RoleProvider。对于我们的应用程序来说,这不是一个案例,所以我不能说这里可能隐藏了哪些问题。

    【讨论】:

    • 实际上我们需要一个可以列出站点的地方 -> 用户信息。因此,即使我们不使用角色,我们也可能需要生成一个保存此信息的表。我们之所以决定使用角色,是因为 .Net 有很多我们可以直接使用的内置角色方法。
    • 我们还没有考虑将迷你站点分成单独的应用程序,但我相信这会导致更多问题(考虑到用户只需一次登录即可访问多个网站)跨度>
    • 我同意申请是个坏主意。我现在将查阅我们的代码,并为您提供更多信息。可能不需要制作新的身份验证模块。自定义成员资格和角色提供者就足够了。
    猜你喜欢
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 2015-12-22
    • 2018-11-28
    • 2016-07-17
    • 1970-01-01
    • 2018-08-20
    相关资源
    最近更新 更多