7

有没有办法控制对.net中某些角色的方法的访问。像

class A
{
    //should only be called by Admins**
    public void Method1() { }

    //should only be called by Admins and PM's** 
    public void Method2() { }
}

我使用 Windows 身份验证仅用于检索用户名,仅此而已。用户角色在不同的应用程序中维护。我认为可以通过属性实现,但我不确定如何

4

3 回答 3

3

有可能,我在一个使用 asp.net 和 AzMan 作为身份验证的 Web 项目中使用了它。

查看代码访问安全性

从记忆中,我们所有的方法看起来都像

[Permission(SecurityAction.Demand, "Permission")]
public void Method1

虽然已经有一段时间了,所以这实际上可能不是 100% 正确的。

我还强烈建议您是否要将保护降低到这个级别以查看面向任务的权限方法,因为这比基于角色的权限灵活得多

于 2012-09-25T03:36:07.817 回答
1

您可以按如下方式执行此操作:

class A 
{     
    //should only be called by Admins**     
    [PrincipalPermission(SecurityAction.Demand, Role="Admin")] 
    public void Method1() 
    { 
    }      

    //should only be called by Admins and PM's**      
    [PrincipalPermission(SecurityAction.Demand, Role="Admin")] 
    [PrincipalPermission(SecurityAction.Demand, Role="PM")] 
    public void Method2() 
    { 
    } 
} 

为此,Thread.CurrentPrincipal必须将其设置为具有所需角色的主体。例如,如果您roleManager在 ASP.NET 应用程序中启用,Thread.CurrentPrincipal则将设置为RolePrincipal带有来自您配置的 RoleProvider 的角色。有关详细信息,请参阅此 MSDN 文章

于 2012-09-25T08:31:12.193 回答
0

您可以使用自定义验证来做到这一点。

1- 在另一个公共类中创建一个方法,该方法以登录 ID 作为参数并以位的形式返回角色。

2- 在所需类的 page_Load 事件上调用此方法,并将返回的位保存在视图状态中。

3- 现在根据角色位验证所需的方法。

于 2012-09-25T04:17:54.063 回答