如何在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
}
我在我的博客上有很多关于这个的文章,包括一个基于用户角色的动态数据属性权限解决方案和DynamicData:基于数据库的权限-第1部分。此外,我还建议您查看codeplex上的安全动态数据示例,其中使用了路由处理程序。