/// <summary> /// /// </summary> /// <param name="item"></param> /// <returns></returns> public override bool Contains(PermissionInfo item) { if (sharedPermissions.Contains(item)) return true;//共享权限包含,无论权限类型都将包含此权限 if (item is OrgPermission)//要判断的权限为机构权限 return selfPermission.Contains(item) || managedUserGroup.Contains(item);//自身机构包含此权限或者可管理用户组中包含此权限 else if (item.Name.Contains(OrgPermission.RES_TAG)) { //要判定的权限,具有@@机构与资源的路径分隔符,则: string resPath = item.Name.Substring(item.Name.IndexOf(OrgPermission.RES_TAG + OrgPermission.RES_TAG.Length)); if (selfPermission.Contains(item)) { //自身机构能包含此权限的机构,取后续的资源权限,只要角色的资源部分拥有此权限(在org机构权限满足的条件下,将忽略角色中的机构部分)进行判断资源权限 if (role.ContainsRes(item.New(resPath))) return true; else return managedUserGroup.Contains(item); } else { //自身机构不包含要判定的权限,只能通过角色和可管理的用户组判定 return role.Contains(item) || managedUserGroup.Contains(item); } } else { //没有机构分割标记路径的权限,则只能通过角色和可管理的用户组以及基类判定 return role.Contains(item) || managedUserGroup.Contains(item) || base.Contains(item); } }