假设我有一个ASP.NET MVC 4应用程序。我需要在同一用户的不同页面上提供不同的权限。例如,同一用户可以是一个页面上的管理员,另一个页面上是访客。默认情况下,MVC提供系统范围的用户权限。 我挖出一些信息,我应该使用自定义成员资格提供程序来实现我的目标,但我还不确定。 有人可以提出解决方案吗?
角色在相同类型的页面上的行为应该相同。假设论坛上的主题内容只能由创建它的人或主持人编辑。然而,用户将无法编辑其他人的主题,并且主持人将无法编辑不属于其主题主题组的主题。我的应用程序中的角色系统应该具有相似的行为。
答案 0 :(得分:0)
您不一定要创建自定义成员资格提供程序,但是您必须以不同方式考虑权限。
首先,将“角色”替换为“操作”。
您需要在应用程序中创建原子,细粒度权限,例如:
一开始可能很难,但这使您在为个人用户分配操作方面具有很强的控制力和灵活性。由于不同的页面将有不同的操作,您将能够自定义其访问权限。
不幸的是,开箱即用的ASP.Net成员资格和角色提供者都会使课程粒度角色的概念失效。 只要你知道他们是行动,而不是角色,你就会很好。
抽象是你的朋友:
public static class Permissions
{
public static bool Operation(string op)
{
//this class can be a lot better
// it can be testable, and check
// error conditions, but this is
// only an example :)
return HttpContext.Current.User.IsInRole(op);
}
}
在某个地方,您需要将所有这些操作分组到角色中,但这需要您进行一些自定义编程。
自定义提供商确实不那么可怕,您可以轻松扩展内置提供商。