Restringir leitura de permissão em um curso

Restringir leitura de permissão em um curso

por Lino Vaz Moniz -
Número de respostas: 0

Se um usuário estiver inscrito é muitos cursos, centenas ou milhares de curso, o processo de login é muito lento. Isso ocorre uma vez que o Moodle carrega permissão de todos os cursos que o usuário estiver inscrito de uma só vez.

Se o seu Moodle estiver nessa situação, uma alternativa é fazer hacker de código para que seja carregado permissão só do curso que o aluno vai acessar. Para isso, siga os seguintes passos:

1)    Abra o arquivo MOODLE_DIR/lib/accesslib.php

2)    Localize a função get_user_access_sitewide($userid)

3)    Adicione o seguinte código aproximadamente na linha 838

        global $USER;
       $courseid=0;
        $cousesql= "";
        $ref=$_SERVER['REQUEST_URI'];
        $pos=strpos($ref,'course/view.php?id=');
        $posas=strpos($ref,'course/loginas.php');
        if($pos || $posas){$courseid= optional_param('id', NULL,PARAM_INT);}
     if($courseid>0){$cousesql= " AND ctx.instanceid=$courseid ";}
      

Esse código atribuir um comando SQL na variável $cousesql caso o usuário está tentando entrar em um curso antes de logar.

Em seguida, adicione  no trecho do código SQL a variável $cousesql depois da claúsula WHERE como mostra o código abaixo. O código inserido dentro do SQL está destacado em vermelho.

$sql = "SELECT ctx.path, ra.roleid, ra.contextid
              FROM {role_assignments} ra
              JOIN {context} ctx
                   ON ctx.id = ra.contextid
         LEFT JOIN {block_instances} bi
                   ON (ctx.contextlevel = ".CONTEXT_BLOCK." AND bi.id = ctx.instanceid)
         LEFT JOIN {context} bpctx
                   ON (bpctx.id = bi.parentcontextid)
            
             WHERE ra.userid = :userid $cousesql
                                AND (ctx.contextlevel <= ".CONTEXT_COURSE." OR bpctx.contextlevel < ".CONTEXT_COURSE.")";

  
Essa alteração faz leitura de permissão apenas do curso em que estiver navegando antes de logar. Esse hacker não se aplica se usuário logar no Moodle e depois entrar no curso.

4)    Salve as alterações