3

在 asp.net 动态数据站点上使用活动目录角色实现安全性的最佳方法是什么?

我想将某些视图(和相关链接)限制为某些角色。即用户 A 只能查看表 x 的列表操作,用户 B 只能查看表 y 的列表操作

4

3 回答 3

2

我在许多应用程序中都这样做了。

为您的应用程序启用 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
}

希望有帮助。

于 2009-03-04T16:59:44.513 回答
1

我的博客上有很多关于此的文章A DynamicData Attribute Based Permission Solution using User Roles和这里 DynamicData: Database Based Permissions - Part 1我还会看看使用路由处理程序的 codeplex 上的 Securing Dynamic Data 示例。

于 2009-03-19T17:32:44.370 回答
0

您可以只使用 ASP.NET Active Directory Memebrship & Role 提供程序来验证\授权用户到应用程序。然后,您可以在要检查 AD 角色成员资格的地方调用Roles.IsUserInRole,以在呈现内容之前检查用户是否属于相关组。

于 2009-03-03T00:49:39.487 回答