我的情况是用户可以使用UI开发复杂的需求。具体而言,它涉及授权用户根据其资格执行某些工作。
例如,用户必须拥有;
我已经查看了规范模式,但我不确定这是否是解决该问题的最佳解决方案。
使用链接到Qualifications表的Authorization表和通过链接到Qualifications表的Training表进行的用户培训,将每个角色的要求存储在数据库中。
答案 0 :(得分:1)
在代码中表示此类规则似乎很简单。首先,你做得太复杂了。 “和”和“所有”都只是“全部”,“一个或多个”和“或”都只是“任何”。所以你只需要几个谓词:
abstract class Requirement
{
abstract public bool Satisfied(User user);
}
sealed class Qual1 : Requirement { ... }
sealed class Qual2 : Requirement { ... }
...
sealed class All : Requirement
{
private IEnumerable<Requirement> r;
public All(params Requirement[] r) { this.r = r; }
public All(IEnumerable<Requirement> r) { this.r = r; }
public override bool Satisfied(User user) {
return r.All(x => x.Satisfied(user));
}
}
sealed class Any : Requirement
{
....
所以现在你只需说:
var q1 = new Qual1();
... etc ...
var rule = All(
Any(
All(q1, q2, q3),
All(
Any(q4, q5),
All(q11, q12, q13))),
All(
Any(q6, q7, q8),
Any(q9, q10)));
现在你可以说:
if (rule(user)) ...
轻松自负。