我想知道是否有人能够帮助我了解以下内容?
我需要一些更复杂的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)]?这可能吗?需要实施什么?
如果有一个我在网上错过的简单解决方案,我很抱歉,但请放心,我现在已经检查了几天。