syl*_*tic 9 c# asp.net asp.net-mvc asp.net-identity
我正在构建一个Intranet站点,其中用户将在公司域上并具有不同的权限级别.我目前正在使用<authentication mode="Windows"/>控制站点访问,但似乎我应该使用ASP.NET身份.
例如,假设我的应用程序是组织中每个部门的仪表板.我想创建一个名为AD的组DashboardUsers,并将每个可以触及此组中的站点的人放入其中.
我还想限制仪表板中的视图.例如,我只希望IT小组看到他们的观点,财务人员看到他们的观点等.
问题 - 我应该使用Windows身份验证来控制对站点的访问,然后使用ASP.NET身份进行用户级权限吗?
我仅使用 WindowsAuthentication 完成了类似的操作。您可以使用授权属性标记您的操作:
[Authorize(Roles = @"DashboardUsers")]
Run Code Online (Sandbox Code Playgroud)
只要该用户是 DashboardUsers AD 组的成员,他们就可以访问此操作。这看起来就像 MVC 魔法,但实际上就是这么简单。
不幸的是,这种方法不允许您为不同的角色重载操作,因为授权属性不是方法签名的一部分。在您的视图中,您必须根据当前用户角色显示不同的锚标记。
IE:
[Authorize(Roles = @"DashboardUsers\Manager")]
public ActionResult IndexManagers()
{
..
}
Run Code Online (Sandbox Code Playgroud)
或者
[Authorize(Roles = @"DashboardUsers\Finance")]
public ActionResult IndexFinance()
{
..
}
Run Code Online (Sandbox Code Playgroud)
评论后编辑: 由于您的身份来自 AD,因此您可以在控制器中使用逻辑,例如:
if(User.IsInRole("Finance"))
{
..
}
else if(User.IsInRole("IT"))
{
..
}
Run Code Online (Sandbox Code Playgroud)
这也会检查它们属于哪个 AD 组。我知道这不是很优雅,但我无法想象将 Windows Auth 与自定义身份混合并在您自己的数据库中管理权限也会很优雅。