










目前我做的这个项目的权限的要求可以归结为以下几点:
其中:
不含参权限判断为:
User user = getUser();
bool isUserHasArticleClassManagePower = user.HasPower(PowerItem.ArticleClassManage);
含参权限判断为
User user = getUser();
bool isUserHasArticlePower = user.HasPower(PowerItem.ArticleManage, someArticleClassID);
设置用户和用户组具有某一个权限为:
User user = getUser();
UserRole userRole = getUserRole();
Power power = user.Power; //Or power = userRole.Power;
power.SetPower(PowerItem.ArticleClassManage);
power.SetPower(PowerItem.ArticleManage, someAricleClassID);
清除用户或用户组的某一个权限为:
User user = getUser();
UserRole userRole = getUserRole();
Power power = user.Power; //Or power = userRole.Power;
power.ClearPower(PowerItem.ArticleClassManage);
power.ClearPower(PowerItem.ArticleManage, someAricleClassID);
User的HasPower方法最终的实现如下:
1: /// <summary>
2: /// 判断是否具有某一项权限
3: /// </summary>
4: /// <param name="powerType">权限类别</param>
5: /// <param name="param">判断所需要的参数</param>
6: /// <returns>是否具有该权限</returns>
7: public bool HasPower(PowerItem powerType, object param)
8: {9: //超级用户拥有所有权限
10: if (_IsSuper) return true;
11: 12: //如果该用户是自定义权限,则使用自身的权限进行判断,
13: //否则,使用对应角色的权限进行判断
14: if (_IsCustomPower)
15: return Power.HasPower(powerType, param);
16: else
17: return _UserRole.Entity.HasPower(powerType, param);
18: }UserRole的HasPower方法比较简单,仅仅是委托给其Power成员的HasPower方法:
public bool HasPower(PowerItem powerType, object param) { return this.Power.HasPower(powerType, param); }
Power类是判断权限的核心。
其成员Powers以"0,1,1,1"的方式保存了所有的权限。权限在该序列中的位置对应其权限项目的枚举值。例如PowerItem.ArticleClassManage的值是1,则序列"0,1,1,1"的第二个数(下标从零开始),表示是否具有ArticleClassManage权限。
对于含参的权限。例如PowerItem.ArticleManage,有一个成员AritcleClasses保存了所有判定为真的参数。如果该成员的值为“1,2,5”,则说明该用户或该角色具有ID为1,2,5的这三个文章分类的管理权限。
其HasPower方法为:
1: public bool HasPower(PowerItem powerType, object param)
2: {3: if (!hasPower(powerType)) return false;
4: 5: //根据参数进行判断
6: switch (powerType)
7: {8: case PowerItem.ArticleManage:
9: return hasPower(_AritcleClass, param);
10: default:
11: return true;
12: } 13: }至于其中私有方法的细节,可以参考代码。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。