好,
我知道我做错了什么 - 却无法找到更好的方法。 我正在开发一个允许用户设置自己的迷你网站的网站。
像宁这样的东西。 此外,我只有1个基本登录,并且通过角色提供了对每个迷你网站的访问权限(现在)。所以我现在这样做的方式是:
每次创建一个新的迷你网站 - 比如说,我在我的应用程序中创建了两个角色。 blah_users 和 blah_admin
创建迷你网站的用户被赋予角色 - blah_admin,并且希望加入此迷你网站(或网络)的每个其他用户都被赋予角色 - blah_user。
任何人都可以查看任何网站的数据。但是,要添加数据,必须是该迷你站点的成员(必须分配blah_user角色)
我面临的问题是,通过基于角色的系统,我不得不手动完成大量的工作。 Asp.Net 2控件在User.IsAunthenticated属性上工作对我来说基本上没用,因为除了IsAuthenticated属性,我还必须检查用户是否具有正确的角色。
我猜有一种更好的方法来构建系统,但我不确定如何。 有什么想法吗?
该网站正在IIS 6上的ASP.Net 2中开发。 非常感谢!
答案 0 :(得分:1)
我担心ASP.NET的标准角色相关内容不是你需要的。您可以尝试更改身份验证模块,以便:
我也不认为为每个网站制作特殊角色是个好主意。当你有100个网站时,你还有200个角色。我很害怕,相当难以管理。
当我们解决类似的任务时,我们只是没有使用标准控件。我们在所有网站上都使用了一组角色。具体用户的成员资格根据当前网站及其与本网站的关系确定。
添加:另一种可能的调查是ASP.NET身份验证系统中存在的应用程序。也许可以将每个子网站隔离到单独的应用程序中?
更新:适合我们应用的方法。
不要做很多克隆的角色。仅使用两个:用户和管理员。如果您的站点是公共的,那么“用户”角色可能只是全局 - 一个站点上的用户与另一个站点上的用户没有区别。如果“用户”和“所有人”是不同的角色,那么“用户”当然也应该绑定到某个站点。
使用标准ASP.NET成员资格用户,但不使用标准角色机制。
建立一种存储网站与用户之间关系的机制。它可以是包含站点ID,用户和角色的简单表。
您必须覆盖的是IsInRole方法。 (方法 s 确切地说,我将在稍后介绍)。此方法在IPrinciple接口中,因此您必须创建自己的主体对象。这很简单。
然后您必须将您的委托人与请求相关联。在PostAuthenticateRequest事件中执行。
还有RoleProvider。老实说,我不确定它何时使用,但它也有IsInRole方法。我们可以用同样的方式覆盖它。但是这个提供者的其他方法更难。例如AddUsersToRoles。它接受用户名和角色的数组,但是应该添加哪些上下文(站点)?到现在?不确定,因为我不知道何时调用此方法。所以它需要一些实验。我看到(Reflector帮助)RopePrincipal本身使用RoleProvider来获取角色列表,所以也许它只使用标准主体实现RoleProvider。对于我们的应用程序,这不是一个案例,所以我不能说这里可以隐藏哪些问题。