feat(tramites): involucrados pueden editar y eliminar horas también
Antes solo el autor original de la entrada (o un Socio/Admin) podía editar/eliminar registros de horas. Ahora cualquiera con acceso al trámite (creador, abogado solicitante, involucrado, socio, admin) puede editar/eliminar horas de cualquier entrada — útil cuando un involucrado nota un error en una hora registrada por otro. * tramites/api.php: removido el check (autor_email == me OR isSocio) de update_hours y delete_hours. canView() sigue siendo el único gate, lo cual es consistente con add_hours. * tramites.html: los botones ✎ y ✕ ahora siempre se muestran en cada entrada de horas. El backend protege la operación.
This commit is contained in:
@@ -369,9 +369,8 @@ try {
|
||||
|
||||
$tramiteId = (int)$row['tramite_id'];
|
||||
if (!canView($pdo, $tramiteId)) err('No tienes acceso al trámite', 403);
|
||||
if (!Auth::isSocio() && $row['autor_email'] !== $user['email']) {
|
||||
err('Solo quien registró las horas (o un Socio/Admin) puede editarlas', 403);
|
||||
}
|
||||
// Cualquiera que pueda ver el trámite (creador, abogado solicitante,
|
||||
// involucrado, o socio/admin) puede editar las horas registradas.
|
||||
|
||||
$abog = trim((string)($b['abogado'] ?? $row['abogado']));
|
||||
$hrs = (float) ($b['hrs'] ?? $row['hrs']);
|
||||
@@ -400,9 +399,7 @@ try {
|
||||
|
||||
$tramiteId = (int)$row['tramite_id'];
|
||||
if (!canView($pdo, $tramiteId)) err('No tienes acceso al trámite', 403);
|
||||
if (!Auth::isSocio() && $row['autor_email'] !== $user['email']) {
|
||||
err('Solo quien registró las horas (o un Socio/Admin) puede eliminarlas', 403);
|
||||
}
|
||||
// Misma regla que update_hours: cualquiera con acceso al trámite puede eliminar.
|
||||
|
||||
$pdo->prepare('DELETE FROM tramites_hours WHERE id = :id')->execute([':id' => $hourId]);
|
||||
$pdo->prepare('UPDATE tramites_legales SET actualizado_por = :u WHERE id = :id')
|
||||
|
||||
+4
-5
@@ -538,14 +538,13 @@ function buildDetail(dept,r){
|
||||
|
||||
const obs=(r.obs||[]).map(o=>`<li>${esc(o.texto)}<br><span class="obs-meta">${esc(o.abogado)} · ${esc(o.fecha)}${o.autor_email?` · <i>${esc(o.autor_email.split('@')[0])}</i>`:''}</span></li>`).join('');
|
||||
const lastUpd=r.obs&&r.obs.length?`<div class="last-upd">Última actualización: ${esc(r.obs[r.obs.length-1].fecha)}</div>`:'';
|
||||
// Cualquiera que pueda ver este trámite puede editar/eliminar horas
|
||||
// (la API valida lo mismo: canView del trámite).
|
||||
const hrs=(r.hours||[]).map(h => {
|
||||
const canEditHr = IS_SOCIO || h.autor_email === MY_EMAIL;
|
||||
const actions = canEditHr
|
||||
? `<span class="hr-actions" onclick="event.stopPropagation()">
|
||||
const actions = `<span class="hr-actions" onclick="event.stopPropagation()">
|
||||
<button class="hr-edit" onclick="editHour(${h.id},'${dept}','${r.id}')" title="Editar">✎</button>
|
||||
<button class="hr-del" onclick="deleteHour(${h.id},'${dept}','${r.id}')" title="Eliminar">✕</button>
|
||||
</span>`
|
||||
: '';
|
||||
</span>`;
|
||||
return `<li>
|
||||
<span class="hl-who">${esc(h.abogado)}</span>
|
||||
<span class="hl-right"><span>${fmtHours(h.hrs)} · ${esc(h.fecha)}</span>${actions}</span>
|
||||
|
||||
Reference in New Issue
Block a user