1

我需要设计一个基于 WCF 服务的系统来过滤 C# 中的角色请求

Rules
    User can access X
    SuperUser can access Y
    Admin can access Z

    Database
    Resource AccessControl
    X        User,SuperUser,Admin
    Y        Admin
    Z        Admin

如何创建一个系统,在其中我可以将这些访问控制转换为哈希或计算出的数学值之类的东西,这样我就不必进行多次检查,例如

If(user = RequestUser.Role.User||user = RequestUser.Role.Admin)
{}

而是做这样的事情

 Resource AccessControl               someCalculatedHashValue
    X        User,SuperUser,Admin     ????
    Y        Admin                    ????
    Z        Admin                    ????

if(user >= someCalculatedHashValue){}

注意:可能存在一对多关系

4

3 回答 3

0

您不能为您的角色使用位向量(即标志枚举)吗?

这样你就可以简单地将这些位加起来作为你的“哈希”。

于 2009-12-22T16:29:29.037 回答
0

您可以通过包装您描述的排名逻辑来创建实现 IsInRole的IPrincipal的自定义实现。


现在我仔细研究了您的问题,这听起来非常像基于 ACL 的安全性,而不是基于角色的安全性。你可能想看看这个

于 2009-12-22T16:31:28.370 回答
0

您未能提供有关系统的详细信息。根据所使用的技术,已经有经过验证且众所周知的技术来管理它(例如,WCF 为您提供“免费”)。

样本可能也不完整,因为您呈现它的方式

用户、超级用户、管理员
管理员
管理员

这可以通过一个简单的枚举和一个 int 比较以及这样的枚举来处理:

public enum Role {
  Anonymous,
  User,
  SuperUser,
  Admin
}

if (user >= (int)Role.User) ...

但这可能太简单了,并不能满足您的真正需求?简而言之:您能详细说明一下吗?

于 2009-12-22T16:31:32.840 回答