コード例 #1
0
        //
        // 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);
        }