Ejemplo n.º 1
0
        //
        // ResourcePermission 权限判断
        //

        #region public bool CheckPermissionByUser(string userId, string permissionItemCode, string permissionItemName = null) 是否有相应的权限
        /// <summary>
        /// 是否有相应的权限
        /// </summary>
        /// <param name="userId">用户主键</param>
        /// <param name="permissionItemCode">权限编号</param>
        /// <param name="permissionItemName">权限名称</param>
        /// <returns>是否有权限</returns>
        public bool CheckPermissionByUser(string userId, string permissionItemCode, string permissionItemName = null)
        {
            // 若不存在就需要自动能增加一个操作权限项
            var permissionItemManager = new PiPermissionItemManager(DBProvider, UserInfo, PiPermissionItemTable.TableName);
            var permissionItemId      = permissionItemManager.GetIdByAdd(permissionItemCode, permissionItemName);
            var permissionItemEntity  = permissionItemManager.GetEntity(permissionItemId);

            // 先判断用户类别
            if (UserInfo.IsAdministrator)
            {
                return(true);
            }

            // 没有找到相应的权限
            if (String.IsNullOrEmpty(permissionItemId))
            {
                return(false);
            }

            // 这里需要判断,是系统权限?
            var returnValue = false;
            var userManager = new PiUserManager(this.DBProvider, this.UserInfo);

            var userRoleManager = new PiUserRoleManager(this.DBProvider, this.UserInfo);

            if (!string.IsNullOrEmpty(permissionItemEntity.CategoryCode) && permissionItemEntity.CategoryCode.Equals("System"))
            {
                // 用户管理员拥有所有的系统权限,不需要授予。
                returnValue = userRoleManager.UserInRole(userId, "UserAdmin");
                if (returnValue)
                {
                    return(returnValue);
                }
            }

            // 这里需要判断,是业务(应用)权限?
            if (!string.IsNullOrEmpty(permissionItemEntity.CategoryCode) && permissionItemEntity.CategoryCode.Equals("Application"))
            {
                //业务管理员拥有所有的业务(应用)权限,不需要授予。
                returnValue = userRoleManager.UserInRole(userId, "Admin");
                if (returnValue)
                {
                    return(returnValue);
                }
            }

            // 判断用户权限
            if (this.CheckUserPermission(userId, permissionItemId))
            {
                return(true);
            }
            // 判断用户角色权限
            if (this.CheckUserRolePermission(userId, permissionItemId))
            {
                return(true);
            }

            // 判断用户组织机构权限,这里有开关是为了提高性能用的,
            // 下面的函数接着还可以提高性能,可以进行一次判断就可以了,其实不用执行4次判断,浪费I/O,浪费性能。
            if (SystemInfo.EnableOrganizePermission)
            {
                //得到用户所有所在的部门(以公司、分支机构、部门、子部门、工作组),包括兼职部门
                var organizeIds = userManager.GetAllOrganizeIds(userId);
                if (this.CheckUserOrganizePermission(userId, permissionItemId, organizeIds))
                {
                    return(true);
                }
            }

            return(false);
        }