Project Server PSI的简单调用方式:权限控制
相信大家都见过PWA的权限级别,非常细,如下图,只是一部分:
那么在自己二次开发时候如何快速判断当前用户是否拥有某个权限或者一些权限呢:
PWA默认情况下有3种权限判断,首先是全局权限判断,如上图示意,其次是对象级别的权限,比如在项目或者任务上有什么类型的权限,比如察看明细或者打开页面等;第三是资源类的权限判断,我理解成安全类别或者安全组。如下图:
代码片段如下:
public override bool CheckPagePermission() { if (PjContext.PSI.SecurityWebService.CheckUserGlobalPermission(PSSecurityGlobalPermission.ViewResourcePlan)) { this._ProjectDeleted = false; if (base.PjContext.PSI.PWAWebService.ProjectCheckProjectExistsInWorkingStore(this._ProjUid)) { Return PjContext.PSI.SecurityWebService.CheckUserObjectPermission(this._ProjUid, PSSecurityObjectType.Project, PSSecurityCategoryPermission.ViewProjectDetailsInProjectCenter); } this._ProjectDeleted = true; return false; } return false; } //上面代码首先检查全局权限是否有查看企业资源权限,其次检查当前登录用户在指定存在的项目上是否有查看项目明细的权限,否则不能做进一步操作 |
如果是多重权限判断,一般上面的方法都支持数组参数,返回的也是标识数组:
Guid[] globalPermissionUids = new Guid[] { PSSecurityGlobalPermission.NewTaskAssignment }; bool[] flagArray = PjContext.PSI.SecurityWebService.CheckUserGlobalPermissions(globalPermissionUids); this.fAllowAddTask = true; this.fAllowAddAssn = flagArray[0]; if (!this.fAllowAddTask && !this.fAllowAddAssn) { LeavePage();//Say sorry! } //以上代码检查当前用户是否有创建任务的权限,否则导向错误页面:
public static void LeavePage(Page page) { string url; if ((SiteMap.CurrentNode == null) || (SiteMap.CurrentNode.ParentNode == null)) { url = SiteMap.RootNode.Url; } else { url = SiteMap.CurrentNode.ParentNode.Url; } SPUtility.Redirect(url, SPRedirectFlags.UseSource, HttpContext.Current); } |