Problem with Deno and permissions.
When read access is requested for a specific folder, each read access request is either granted or denied, depending on what the user decides on the first request.
deno run --unstable app.ts
// --> Deno requests read access to "./file1" --> grant
const status1 = await Deno.permissions.request({ name: "read", path: "./file1" });
const status2 = await Deno.permissions.request({ name: "read", path: "./file2" }); // --> Deno skip request
console.log("Request ./file1", status1.state); // --> Granted | Denied
console.log("Request ./file2", status2.state); // --> Granted [!] | Denied [!]
Same for revoke permissions
deno run --unstable --allow-read=./file1,./file2 app.ts
case 1:
// --> Deno revoke read access to "./file1"
const status1 = await Deno.permissions.revoke({ name: "read", path: "./file1" });
const status2 = await Deno.permissions.query({ name: "read", path: "./file1" });
const status3 = await Deno.permissions.query({ name: "read", path: "./file2" });
console.log("Request ./file1", status1.state); // --> Granted [!]
console.log("Request ./file1", status2.state); // --> Granted [!]
console.log("Request ./file2", status2.state); // --> Granted
case 2:
const status1 = await Deno.permissions.revoke({ name: "read" }); // --> Deno revoke read access
const status2 = await Deno.permissions.query({ name: "read", path: "./file1" });
const status3 = await Deno.permissions.query({ name: "read", path: "./file2" });
console.log("Request ./file1", status1.state); // --> Prompt
console.log("Request ./file1", status2.state); // --> Granted [!]
console.log("Request ./file2", status2.state); // --> Granted [!]
They way we model permission state is totally insufficient. I'm doing a big refactor of cli/permissions.rs and its consumers. Requests and revokes will be modelled properly with separate allowlists and denylists.
Most helpful comment
They way we model permission state is totally insufficient. I'm doing a big refactor of
cli/permissions.rsand its consumers. Requests and revokes will be modelled properly with separate allowlists and denylists.