Geek Culture
Published in

Geek Culture

Permission Management In

How to Coda Permissions?

To manage your internal approval processes

In the community I saw various cases related to buttons. For example this one of Scott. He offers a smart solution to make you think twice and on top he integrates nicely a color formula to underline the message.

If(thisRow.[Double Check].IsBlank(),"Delete Rows" ,("#ff0000","Press again to delete") )

This post is about deleted rows by accident and my first idea was: why not using a button to approve or maybe they did and it still happend?

example: Our finance person has to go into a “marketing agreements” table which is maintained by the marketing team. Her role is only to mark the agreements as paid and edit the payment date. She has on occasion accidentally deleted rows and only realized it weeks later (by having the entire row selected and hitting backspace because she mistakenly thought the focus was elsewhere).

In this blog I focus on how to use buttons in an approval process, meaning that users can only in a certain order vote.

The inspiration

Maria Marquis. shared a nice doc early December 2020 on holiday preparations. One part included a logic that permits users to subscribe to a group and to step out again, using a single button. You find a variation on this version ín my gallery as well. We do not need this exact logic, but the idea that with one button you can manage multiple tasks inspired to me.

The solution we need

We are on the outlook for a button based solution that registers only specific users in a specific order. In an other blog I’ll explain how to notify or email the next users and how to wrap up the process.

In this blog we focus on:

  • Who is allowed to press the button
  • How to respect the order
user().Contains([Christiaan Huizer]).Not()

The double negation (Disable & Not) gives in a positive result. I can press this button in the column Huizer Only, but Mr Treats cannot and I cannot press ‘his’ button.

In the next column with the name Team — Huizer Only I apply a comparable logic, but this time I refer to an other table that contains the user(s). Using @Team HRM.Members I reference to the content of a specific cel.

How to coda a user as part of a column

You can easily see the benefits of this approach. Changes in this table are picked up everywhere else. It enables to simplify working processes and certainly in larger companies it avoids broken processes when somebody leaves the organisation. This works for one user and for a group of users.

We go for a third option and this contains the teams per level. In our example we have three levels.

How to respect the order?

In this example our internal rule is that first level 1 should confirm, next level 2 and last Level 3.

We already showed how by using the ‘@’ symbol we can extract values living in a cell. As such we can create a function that looks like the one below.

If somebody with Level 1 status has confirmed, the button should open for level 2. The solution is found in the Disable function.

This part orders the permissions. If the ‘ConfirmedBy’ column is empty, we invite level 1, if it contains level 1, we open up to level 2 and so on. This works like this because — and this is the trick — the formula Switch() deals with rules in the order as they are written. Thus in case rule 1 is not met, it won’t go to rule 2.

N.b. to make this solution work, the column ‘ConfirmedBy’ should only contain the last user who confirmed.

Isn’t this a wonderful simple solution for such a complex problem? It took me a few days to get the insight, but once you see this, it cannot be unseen ;-)

in a next blog I focus on the notification & email processes behind it.

To finish, it is maybe good to know that for a client I developed and applied the above logic even one level further. We introduced a second button to ensure that permissions are not granted by mistake. For this I open a row that is part of an other table and looks like below for each option (agree or disagree).

I hope you enjoyed this article. If you have questions feel free to reach out. Though this article is for free, my work (including advice) won’t be, but there is always room for a chat to see what can be done. Besides you find my (for free) contributions to the Coda Community and on Twitter

My name is Christiaan Huizer and I am the owner of Huizer Automation. A company specialized in serving SME in harvesting data and keeping it aligned. I am a Coda Expert and I mainly rely on Coda, Mailjet, Zapier & Paperform to get the job done.

Huizer Automation — Coda Expert on how to to set up a smart permission logic with




A new tech publication by Start it up (

Recommended from Medium

A CI/CD pipeline integrates building and testing from commits, and automates deployment
A screen displaying application metrics
How to decide which tests to automate

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Christiaan Huizer

Christiaan Huizer

Christiaan uses Coda mainly for planning & calculations of all sorts. Follow me to learn how to Coda with numbers. I blog at least once per week.

More from Medium