/// <summary> /// 为了提高授权的运行速度 /// </summary> /// <param name="systemCode">系统编号</param> /// <param name="userId">用户主键</param> /// <param name="roleId">角色主键</param> /// <param name="enabled">有效状态</param> /// <returns>主键</returns> public string AddToRoleById(string systemCode, string userId, string roleId, bool enabled = true) { string result = string.Empty; if (string.IsNullOrEmpty(systemCode)) { systemCode = "Base"; } string tableName = string.Empty; if (!string.IsNullOrEmpty(userId) && !string.IsNullOrEmpty(roleId)) { BaseUserRoleEntity entity = new BaseUserRoleEntity(); entity.UserId = userId; entity.RoleId = roleId; entity.Enabled = enabled ? 1 : 0; entity.DeletionStateCode = 0; // 2016-03-02 吉日嘎拉 增加按公司可以区别数据的功能。 if (this.DbHelper.CurrentDbType == CurrentDbType.MySql) { entity.CompanyId = BaseUserManager.GetCompanyIdByCache(userId); } // 2015-12-05 吉日嘎拉 把修改人记录起来,若是新增加的 if (this.UserInfo != null) { entity.CreateUserId = this.UserInfo.Id; entity.CreateBy = this.UserInfo.RealName; entity.CreateOn = System.DateTime.Now; entity.ModifiedUserId = this.UserInfo.Id; entity.ModifiedBy = this.UserInfo.RealName; entity.ModifiedOn = System.DateTime.Now; } tableName = systemCode + "UserRole"; BaseUserRoleManager manager = new BaseUserRoleManager(this.DbHelper, this.UserInfo, tableName); result = manager.Add(entity); } return(result); }
// // 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) { var result = false; if (!ValidateUtil.IsInt(userId)) { return(result); } // 忽略超级管理员,这里判断拒绝权限用的,因为超级管理员也被拒绝了,若所有的权限都有了 if (!ignoreAdministrator) { // 先判断用户类别 if (UserInfo != null && BaseUserManager.IsAdministrator(UserInfo.Id.ToString())) { return(true); } } // string permissionId = moduleManager.GetIdByAdd(permissionCode, permissionName); // 没有找到相应的权限 // if (string.IsNullOrEmpty(permissionId)) //{ // return false; //} var permissionEntity = new BaseModuleManager().GetEntityByCacheByCode(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 (CheckResourcePermission(systemCode, BaseUserEntity.CurrentTableName, userId, permissionEntity.Id.ToString())) { return(true); } // 判断用户角色权限 if (CheckUserRolePermission(systemCode, userId, permissionEntity.Id.ToString(), useBaseRole)) { return(true); } // 判断用户组织机构权限,这里有开关是为了提高性能用的, // 下面的函数接着还可以提高性能,可以进行一次判断就可以了,其实不用执行4次判断,浪费I/O,浪费性能。 if (BaseSystemInfo.UseOrganizationPermission) { // 2016-02-26 吉日嘎拉 进行简化权限判断,登录时应该选系统,选公司比较好,登录到哪个公司应该先确定? var companyId = BaseUserManager.GetCompanyIdByCache(userId); if (!string.IsNullOrEmpty(companyId)) { if (CheckResourcePermission(systemCode, BaseOrganizationEntity.CurrentTableName, companyId, permissionEntity.Id.ToString())) { return(true); } } // 这里获取用户的所有所在的部门,包括兼职的部门 /* * BaseUserManager userManager = new BaseUserManager(this.DbHelper, this.UserInfo); * string[] organizationIds = userManager.GetAllOrganizationIds(userId); * if (organizationIds != null * && organizationIds.Length > 0 * && this.CheckUserOrganizationPermission(systemCode, userId, permissionEntity.Id, organizationIds)) * { * return true; * } */ } return(false); }