Cobranza: privado_() usa Permission.VIEW (NONE no está soportado y da Access denied)

prepararCobranza() falló en la API real con "Access denied: DriveApp." en setSharing.
Con Access.PRIVATE el permiso se ignora. El simulacro ahora rechaza NONE como Google.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Efrain (Helgen) 2026-10-20 17:53:17 -06:00
parent 768554557f
commit 7e3256415a
2 changed files with 3 additions and 2 deletions

View File

@ -1054,7 +1054,8 @@ function exigirCobranza_() {
* las personas agregadas una por una (tania@, leo@). Workspace comparte con todo helgen.tech lo que se crea (§6.11).
*/
function privado_(item) {
if (item.getSharingAccess() !== DriveApp.Access.PRIVATE) item.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.NONE);
// Permission.NONE no está soportado (da "Access denied: DriveApp"); con PRIVATE el permiso se ignora.
if (item.getSharingAccess() !== DriveApp.Access.PRIVATE) item.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.VIEW);
return item;
}

View File

@ -35,7 +35,7 @@ function libro(id,nombre,pestanas){const L={id,nombre,pest:pestanas||{},getId:()
// ---- Drive simulado ----
let nId=0; const carpetas={}, archivos={};
// Como Workspace de helgen.tech: todo lo nuevo nace compartido con el dominio (acceso 'DOMAIN')
const compartible=o=>Object.assign(o,{acceso:'DOMAIN',getSharingAccess:()=>o.acceso,setSharing:(a,p)=>{o.acceso=a;o.permiso=p}});
const compartible=o=>Object.assign(o,{acceso:'DOMAIN',getSharingAccess:()=>o.acceso,setSharing:(a,p)=>{if(p==='NONE')throw new Error('Access denied: DriveApp.');o.acceso=a;o.permiso=p}}); // NONE no está soportado en Apps Script
function carpeta(nombre,padre){const f=compartible({id:'F'+(++nId),nombre,padre,hijos:[],archivos:[],trashed:false}); Object.assign(f,{
getId:()=>f.id,getName:()=>f.nombre,getUrl:()=>'https://drive/'+f.id,isTrashed:()=>f.trashed,
getFoldersByName:n=>{const l=f.hijos.filter(h=>h.nombre===n);let i=0;return{hasNext:()=>i<l.length,next:()=>l[i++]}},