有没有办法控制对.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身份验证来检索用户名,仅此而已。用户角色在不同的应用程序中维护。我认为这可能是通过属性但我不确定如何
答案 0 :(得分:3)
有可能,我在使用asp.net和AzMan作为身份验证的Web项目中使用它。
从记忆中我们所有的方法看起来都像
[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-现在根据角色位验证所需的方法。