授权Web App用户使用用户信息和角色

时间:2010-10-26 11:38:30

标签: c# .net security permissions authorization

我想知道是否有人能够帮助我了解以下内容?

我需要一些更复杂的webapp授权规则而不仅仅是角色,我工作得很好。类似于“允许所有管理员。允许买家,只要他们拥有正确的部门ID并且允许查看此客户的凭据”。

我使用自定义标识和自定义主体来存储信息,例如是否允许用户查看所有客户端或他们可能看到的单个客户端。此信息从数据库中检索,并在创建身份/主体时添加。

我创建了一个扩展IPermission,ISecurityEncodable的自定义权限。在此,我已将Demand()函数修改为以下内容:

public  void Demand()
    {
        this._identity = (UserIdentity)Thread.CurrentPrincipal.Identity;
        if (Thread.CurrentPrincipal.IsInRole("Admin")) { }
        else if ((Thread.CurrentPrincipal.IsInRole("Buyer")) && 
                 (this._identity.CanViewAllClients) &&
                 (this._identity.IsInDept(this._departmentID)) ) { }
        else if ((Thread.CurrentPrincipal.IsInRole("Buyer")) && 
                 (this._identity.CanViewClient(this._requestedClient)) &&
                 (this._identity.IsInDept(this._departmentID)) ) { }
        else { throw new SecurityException("Custom Permission Denied"); }  
    }

当我希望使用

进行授权时,我会调用它
CustomPermission custperm = new CustomPermission(requestedClient, reqClientDept);
custperm.Demand();

这样做很好,但似乎是一种混乱,黑客的做事方式。特别是因为将我的安全角色用作属性就好了。

[PrincipalPermission(SecurityAction.Demand, Authenticated = true)]
public class...

也许有一种方法可以使用自定义IsAuthorised检查调用[CustomPrincipalPermission(SecurityAction.Demand,Authorized = true)]?这可能吗?需要实施什么?

如果有一个我在网上错过的简单解决方案,我很抱歉,但请放心,我现在已经检查了几天。

1 个答案:

答案 0 :(得分:0)

看起来你想要的是一个声明性的而不是一个程序性的需求。为此,您需要根据CustomPermissionAttribute创建CustomPermission

有一个自定义权限here的声明性要求的示例以及创建自定义权限属性here的详细信息。