Non so se riuscirò a spiegare correttamente, ma quello che vorrei mostrare a tutti è questo:
1) ho una tabella 'anagrafe', si badi bene anagrafe con la 'a' iniziale minuscola;
2) ho un controller che ha questi due compiti: se l'utente che sta operando ha lo status di amministratore, prima seleziona tutti i record di anagrafe, poi apre una view dove li mette in elenco con accanto ad ogni record un bottone che ne consente la visione di dettaglio (ossia con tutti i campi anche quelli non mostrati nella tabella),
se l'utente ha lo status di 'Guest', allora l'elenco viene limitato ai soli record che possiedono uno stesso codice che ha l'utente.
pubblico il codice:
Codice PHP:
public function showIndex(int $pag=1,string $by='FullName')
{
if (!empty($_SESSION['message'])){
....
}else{
....
}
$result=$this->........();
if(!$result['success']){
....
redirect('/denied');
}
$this->pagination->setPage($pag);
....
if($this->userVM->userRoles->ClaimValue=='Guest')
{
$result=$this->personService->getAllPersons($this->pagination,$this->userVM->CodiceConto);
}else{
$result=$this->personService->getAllPersons($this->pagination);
}
$list=$result['list'];
if(isset($result['totalRows'])){
$this->pagination->setTotalLinks($result['totalRows']);
}
$this->content=view('persons'.DIRECTORY_SEPARATOR.'index',[
'info'=>$info,
'list'=>$list,
'pagination'=>$this->pagination]);
}
il codice della view 'index' è:
Codice PHP:
...
<?php
$r=0;
foreach ($list as $row) {
$r++;
?>
<th scope="row" class="hrow"><?= $r ?></th>
<td>...</td>
<td>
<form class="form-inline" id="frmUpdate" action="/contact/detail/<?=$row->ID?>" method="GET">
<button class="btn btn-sm btn-outline-primary" type="submit">
<i class="fa-solid fa-file-lines mr-1"></i>detail
</button>
</form>
</td>
<td>
....
</td>
e infine il codice del servizio è:
Codice PHP:
public function getAllPersons(PersonPagInfoModel $pagination,string $code='')
{
......
if(!empty($code)){
$sql="SELECT * FROM anagrafe WHERE ....' "
. "OR ....' "
. "OR .... "
. "OR CodiceConto LIKE '%".$search."%' ";
}else{
$sql="SELECT * FROM anagrafe WHERE "
. "CodiceConto ='".$code."' ";
}
$totalRows=$this->getTotalRows($sql);
$sql .= "ORDER BY $orderby $orderdir LIMIT $offset,$limit";
....
return $result;
}
ed ecco cosa succede: quando l'utente è un amministratore, cliccando sul bottone 'DETAIL' tutto procede, qunado l'utente è 'GUEST', viene fuori la seegnalazione
SQLSTATE 42502: Base Table or view not found: 1146 Table 'nomesito.Anagrafe' doesn't exists
si badi al nome della tabella con l'iniziale A maiuscola, che non è stata inserita da nessuna parte.
Se conoscete una risposta a questo vi ringrazierò per tutta la vita.