控制对方法的访问

时间:2012-09-25 03:03:57

标签: c# .net

有没有办法控制对.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身份验证来检索用户名,仅此而已。用户角色在不同的应用程序中维护。我认为这可能是通过属性但我不确定如何

3 个答案:

答案 0 :(得分:3)

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

查看Code Access Security

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

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

虽然已经有一段时间了,但实际上可能并非100%正确。

我还强烈建议您是否要将保护范围降低到此级别以查看task orientated permission approach,因为这比基于角色的权限更灵活

答案 1 :(得分: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设置为具有所需角色的主体。例如,如果在ASP.NET应用程序中启用roleManager,则Thread.CurrentPrincipal将设置为RolePrincipal,其中包含已配置的RoleProvider中的角色。有关详细信息,请参阅this MSDN article

答案 2 :(得分:0)

您可以使用自定义验证来完成此操作。

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

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

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