// // ResourcePermission 权限判断 // #region public bool IsAuthorized(string systemCode, string userId, string permissionCode, string permissionName = null, bool ignoreAdministrator = false, bool useBaseRole = true) 是否有相应的权限 /// <summary> /// 是否有相应的权限 /// </summary> /// <param name="systemCode">系统编号</param> /// <param name="userId">用户主键</param> /// <param name="permissionCode">权限编号</param> /// <param name="permissionName">权限名称</param> /// <param name="ignoreAdministrator">忽略管理员默认权限</param> /// <param name="useBaseRole">通用基础角色的权限是否计算</param> /// <returns>是否有权限</returns> public bool IsAuthorized(string systemCode, string userId, string permissionCode, string permissionName = null, bool ignoreAdministrator = false, bool useBaseRole = true) { bool result = false; // 忽略超级管理员,这里判断拒绝权限用的,因为超级管理员也被拒绝了,若所有的权限都有了 if (!ignoreAdministrator) { // 先判断用户类别 if (UserInfo != null && UserInfo.IsAdministrator) { return(true); } } // string permissionId = moduleManager.GetIdByAdd(permissionCode, permissionName); // 没有找到相应的权限 // if (String.IsNullOrEmpty(permissionId)) //{ // return false; //} BaseModuleEntity permissionEntity = BaseModuleManager.GetObjectByCacheByCode(systemCode, permissionCode); // 没有找到这个权限 if (permissionEntity == null) { return(false); } // 若是公开的权限,就不用进行判断了 if (permissionEntity.IsPublic == 1) { return(true); } if (permissionEntity.Enabled == 0) { return(false); } if (!ignoreAdministrator) { // 这里需要判断,是系统权限?(系统管理员?) /* * BaseUserManager userManager = new BaseUserManager(this.DbHelper, this.UserInfo); * if (!string.IsNullOrEmpty(permissionEntity.CategoryCode) && permissionEntity.CategoryCode.Equals("System")) * { * // 用户管理员 * result = userManager.IsInRoleByCode(userId, "System"); * if (result) * { * return result; * } * } * // 这里需要判断,是业务权限?(业务管理员?) * if (!string.IsNullOrEmpty(permissionEntity.CategoryCode) && permissionEntity.CategoryCode.Equals("Application")) * { * result = userManager.IsInRoleByCode(userId, "Application"); * if (result) * { * return result; * } * } */ } // 判断用户权限 if (this.CheckResourcePermission(systemCode, BaseUserEntity.TableName, userId, permissionEntity.Id)) { return(true); } // 判断用户角色权限 if (this.CheckUserRolePermission(systemCode, userId, permissionEntity.Id, useBaseRole)) { return(true); } // 判断用户组织机构权限,这里有开关是为了提高性能用的, // 下面的函数接着还可以提高性能,可以进行一次判断就可以了,其实不用执行4次判断,浪费I/O,浪费性能。 if (BaseSystemInfo.UseOrganizePermission) { // 2016-02-26 吉日嘎拉 进行简化权限判断,登录时应该选系统,选公司比较好,登录到哪个公司应该先确定? string companyId = BaseUserManager.GetCompanyIdByCache(userId); if (!string.IsNullOrEmpty(companyId)) { if (this.CheckResourcePermission(systemCode, BaseOrganizeEntity.TableName, companyId, permissionEntity.Id)) { return(true); } } // 这里获取用户的所有所在的部门,包括兼职的部门 /* * BaseUserManager userManager = new BaseUserManager(this.DbHelper, this.UserInfo); * string[] organizeIds = userManager.GetAllOrganizeIds(userId); * if (organizeIds != null * && organizeIds.Length > 0 * && this.CheckUserOrganizePermission(systemCode, userId, permissionEntity.Id, organizeIds)) * { * return true; * } */ } return(false); }