如何设计系统来过滤角色请求?

时间:2009-12-22 16:23:47

标签: c# roles roleprovider security-roles

我需要设计一个基于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){}

注意:可能有一对多关系

3 个答案:

答案 0 :(得分:0)

你不能为你的角色使用位向量(即Flags枚举)吗?

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

答案 1 :(得分:0)

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


现在我仔细研究了你的问题,它听起来非常像基于ACL的安全性,而不是基于角色的安全性。您可能需要改为look at this

答案 2 :(得分:0)

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

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

用户,超级用户,管理员
管理员
管理员

这可以通过简单的枚举和int比较以及类似的枚举来处理:

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

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

但这可能太简单了,无法满足您的实际需求?简而言之:你能详细说明吗?