在 asp.net 动态数据站点上使用活动目录角色实现安全性的最佳方法是什么?
我想将某些视图(和相关链接)限制为某些角色。即用户 A 只能查看表 x 的列表操作,用户 B 只能查看表 y 的列表操作
在 asp.net 动态数据站点上使用活动目录角色实现安全性的最佳方法是什么?
我想将某些视图(和相关链接)限制为某些角色。即用户 A 只能查看表 x 的列表操作,用户 B 只能查看表 y 的列表操作
我在许多应用程序中都这样做了。
为您的应用程序启用 Windows 身份验证。
制作一些可以存储用户凭据的对象,并将该对象存储在会话中以便快速检索。如果它不存在,您可以快速重建它。我通常将每个角色设置为一些,例如:
enum USER_ROLE : int
{
Role1 = 1,
Role2 = 2,
Role3 = 4,
Role4 = 8,
etc
}
if (Context.User.IsInRole("Roll1Name")) YourUserObject.Roles += USER_ROLE.Role1;
if (Context.User.IsInRole("Roll2Name")) YourUserObject.Roles += USER_ROLE.Role2;
etc
然后,每当需要保护控件时,我都会将它传递给一个函数,该函数采用 HtmlControl 和一个基于用户角色和该控件的安全要求的属性。
例如。bool SetControlSecurity(HtmlControl ctrl,int iUserRoles,int iControlRoles,ACTION eAction)
所以做一个面板的例子可能是:
SetControlSecurity(pnlUserInfo, YourUserObject.Roles, eRole.Role2, ACTION.Hide);
我通常还会将参数设置为在安全失败时执行的操作类型,例如隐藏、只读、清除数据等...
比较函数中的角色很容易:
bool bHasAccess = ((iUserRole & iControlRoles) > 0);
if (bHasAcess)
{
// leave the control or make sure it is visible etc
}
else
{
// take action to secure the control based on the action
}
希望有帮助。
我的博客上有很多关于此的文章A DynamicData Attribute Based Permission Solution using User Roles和这里 DynamicData: Database Based Permissions - Part 1我还会看看使用路由处理程序的 codeplex 上的 Securing Dynamic Data 示例。
您可以只使用 ASP.NET Active Directory Memebrship & Role 提供程序来验证\授权用户到应用程序。然后,您可以在要检查 AD 角色成员资格的地方调用Roles.IsUserInRole,以在呈现内容之前检查用户是否属于相关组。