C# 如何设计一个系统来过滤角色请求?

C# 如何设计一个系统来过滤角色请求?,c#,roles,roleprovider,security-roles,C#,Roles,Roleprovider,Security Roles,我需要设计一个基于WCF服务的系统来过滤C中角色的请求# 我如何创建一个系统,在这个系统中,我可以将这些accesscontrols转换成散列或计算出的数学值,这样我就不必像这样进行多次检查 If(user = RequestUser.Role.User||user = RequestUser.Role.Admin) {} 相反,你可以这样做 Resource AccessControl someCalculatedHashValue X U

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

我如何创建一个系统,在这个系统中,我可以将这些accesscontrols转换成散列或计算出的数学值,这样我就不必像这样进行多次检查

If(user = RequestUser.Role.User||user = RequestUser.Role.Admin)
{}
相反,你可以这样做

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

if(user >= someCalculatedHashValue){}

注意:可能存在一对多关系您不能为您的角色使用位向量(即标志枚举)吗


通过这种方式,您可以简单地将这些位相加为“hash”。

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



现在我仔细看看您的问题,它听起来非常像基于ACL的安全性,而不是基于角色的安全性。您可能需要进行更改。

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

这些示例可能也不完整,因为您呈现它的方式

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

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

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

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

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

用户是否只有一个角色?假设这是在WCF中完成的,有什么现成的功能?WCF允许您根据您的设计以声明方式(无if语句)进行授权。如果您想/需要在代码中完成,它也支持您,但您最终会遇到同样的问题,必须将角色映射到操作。因此,在这一点上,你回到你的“如果一团糟”或回到开始。您可以查看枚举,也可以探索是否可以将逻辑提取到扩展方法或类似的方法中,以实现访问权限和角色/用户之间的映射。
public enum Role {
  Anonymous,
  User,
  SuperUser,
  Admin
}

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