Looking for Guidance: Subtask Permissions + Retrieving Entities After Reassignment

I’m trying to take advantage of Fibery’s permission features, but I’ve run into a couple of roadblocks that I’m not sure how to solve.


Setup

  • Database 1: Tasks

  • Database 2: Subtasks

  • Permissions: No one can view a Task or Subtask unless they’re assigned to it


Issue #1: Subtask users can’t see the parent Task

Subtask assignees still need visibility into the parent Task for context - descriptions, links, files, comments, etc.

Right now, they can’t see any of it unless we also assign them to the parent Task, which defeats the purpose of keeping Task-level and Subtask-level visibility clean and accurate.

Question:

Is there a way to let users view a parent Task if they’re assigned to one of its Subtasks without giving them access to every Task?


Issue #2: Contributors lose access after reassigning

If a contributor updates an entity (task/subtask) and then assigns it to someone else, the entity disappears from their view immediately - meaning they can no longer access or edit it if they realize they need to make another change.

This is creating a workflow problem because contributors often pass a Task/Subtask along and then realize something they want to adjust, but can’t access it anymore unless we re-assign them the entity.

Question:

Is there any way to tap into the activity log - or any other mechanism - to allow a user to retrieve or at least view entities they’ve recently touched, even if they’re no longer the assignee?

Something like “recently edited by me” visibility, or any rule that keeps the entity accessible after they’ve interacted with it?

Would love to get some guidance on the above.

Issue #1
Create a new field in the task database and let it equal parent task assignees and subtasks assignees in one collection (I think we can do this using formulas). This field should control access. If you can’t use one calculated collection, then rollup assignees of subtasks to the parent task instead and control permissions using assignees and the rollup.

Issue #2
I think the problem is actually your flow of work here.
If collaborators need access to more than just tasks they’re explicitly assigned, then I don’t recommend access be tied to the assignee field. What’s the criteria where a collaborator should be able to tweak something when they’re no longer assigned? Is it for certain projects? Is it for certain task types? I’d look for the real common denominator there since assignee is not it.
That said, you can create an automation that logs all assignees to a separate user field and have that field control access. I just don’t think that’s good data.

1 Like

Thanks for the reply! I ended up going a different route, but your comment led me toward the solution I just implemented.

I don’t remember ever adding the Members field, so I’m pretty sure Fibery created it automatically at some point. Either way, it’s glorious! :laughing:

Here’s what I set up:

  • Task Rule – When a Task gets an assignee, append that user to the Members field
  • Subtask Rule – When a Subtask gets an assignee, append that user to the parent Task’s Members field
  • Permissions - Are based on Members and not Assignees

Works like magic and achieves exactly what I was looking for.

Curious if this is the right way to handle it or if I just hacked my way to the result in a not-so-ideal way.

1 Like

I’m running into chaos with the current setup and could use some guidance.

Right now, the automation updates the Members field, but it overwrites whatever was there before. That means teammates keep losing access to entities they previously had access to, which obviously isn’t ideal.

Here’s the automation that’s causing the issue :backhand_index_pointing_down:

The goal is simple:

When someone is assigned to a Subtask, they should automatically be added to the parent Task’s Members field so they can view the full context.

What I think I need is a formula in the Members field that pulls in both:

  • [Step 1 Subtask].Assigned
  • [Step 1 Subtask].Task.Assigned

But I can’t get the syntax right, and the current approach isn’t cutting it.

Any pointers or examples would be hugely appreciated!

So after digging in further, it looks like updating Members via functions just isn’t possible.
Members is a Collection field, and collections are limited in Fibery functions - there’s no way to merge or manipulate them the way you’d expect.

I’d really appreciate any feedback on this approach, because honestly, I’m not 100% sure this is the best way to go about it.

And for anyone from the Fibery team who might be reading: please, please take a look at how Coda handles functions. Working with Fibery’s functions is brutally painful compared to Coda. Coda is in a league of it’s own when it comes to functions.

Here’s the script I ended up with :backhand_index_pointing_down:


// Helper to always return an array
function toArray(val) {
    if (!val) return [];
    if (Array.isArray(val)) return val;
    return [val];
}

// Set your Task database type here (e.g., "Task" or "Project Management/Task")
const TASK_TYPE = "Task";
const MEMBERS_FIELD = "Members"; // Adjust if your field is named differently

async function run() {
    for (const subtask of args.currentEntities) {
        // Get the parent Task reference from the Subtask
        const taskRef = subtask['Task'];
        if (!taskRef || !taskRef['Id']) {
            // No parent Task, nothing to update
            continue;
        }

        // Fetch the latest Task entity with its current Members
        const taskEntity = await fibery.getEntityById(TASK_TYPE, taskRef.Id, [MEMBERS_FIELD]);

        // Normalize fields to arrays
        const subtaskAssigned = toArray(subtask['Assigned']);
        const currentMembers = toArray(taskEntity[MEMBERS_FIELD]);

        // Build a set of current member IDs for quick lookup
        const currentMemberIds = new Set(currentMembers.map(u => u && u['Id']));

        // For each assigned user in the subtask, add to Members if not already present
        for (const user of subtaskAssigned) {
            if (user && user['Id'] && !currentMemberIds.has(user['Id'])) {
                await fibery.addCollectionItem(TASK_TYPE, taskRef.Id, MEMBERS_FIELD, user['Id']);
            }
        }
    }
}

return run();

Another issue with this approach is the flood of notifications it creates for the team. Both automations are running purely for permissions, and nobody needs alerts about these actions.

Is there any way to suppress or hide these notifications?

Adding or removing something from a collection instead of replacing: Add User who triggered on People field - #12 by Jonathan1

This is more robust than scripting as scripting breaks if names of databases/spaces change.

And about the notification, in the field settings for the “Members” field, make sure the “Notify when assigned” is off.

2 Likes

Have you tried using a custom access template?

No, there isn’t. You would probbaly need to use an automation to keep a person linked to the Task (via an additional people field) even after being unassigned