예제 #1
0
        /// <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);
        }
예제 #2
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)
        {
            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);
        }