我需要设计一个基于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){}
注意:可能有一对多关系
答案 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) ...
但这可能太简单了,无法满足您的实际需求?简而言之:你能详细说明吗?