Different users get access to different forms

Wanted to check if there is any way to give access to different users for different forms.

Like doctors fill up surveys meant for them & don't get confused with the forms meant for patients or nurses or admin staff.

Most of the time they also fill those forms because it's visible to them on their devices.

This is a feature that a lot of people have asked for and we'd like to build it. The issue is at https://github.com/opendatakit/opendatakit/issues/82 and we don't have an ETA just yet.


Thanks Yaw for the prompt reply.
Any tool build on ODK that serves this purpose that u could suggest?
Commcare or Smap or any other that may have task or form assignment/ allocation?

Hi @RishikeshMishra, you might consider SurveyCTO, which is an ODK-based platform. We've recently introduced enterprise features which provide highly customisable form and data access permissions which govern what users can see and do on Collect and on the server. See the overview video on the enterprise edition on YouTube for a more detailed overview.

For full disclosure, I work for Dobility, the social enterprise that develop and maintain SurveyCTO.


I think CommCare, ELMO, Ona, and Smap all have something similar to what you'd like Rishikesh. Check out their websites and try them out. I've also invited those invited some of those folks to participate in this discussion.

1 Like

Thanks for the invite yaw. Hi @RishikeshMishra, Yes I think this is a pretty common feature on odk compatible servers. Smap allows you to put forms into projects and then give access to users to projects. So you could have one project for nurses and another for doctors.

Smap does support assignment of tasks to individual users. Hence you could assign a task to the doctors to complete a md form. You can then assign a task to the nurses to complete a nursing form. What the user will then see on their device is that task rather than a form. By default once completed a task is removed, however you can specify that tasks are "repeating" in which case they can be completed many times like a form.

A task is actually an instance which in your example will probably be empty. The forms also need to be on the device in order to complete a task however for a project you can specify that the forms are hidden so that the doctors won't see the forms that the nurses are using to complete their tasks.

Tasks would require you to use a fork of ODK collect on your devices (fieldTask). You would also need to use Smap as your server.


In case it's useful - my fork of Collect appends a deviceID to the formList querystring, and each device gets a customised form list in the response - but I use a custom PHP/MySQL server to send the form lists and forms, I don't use Aggregate. If you're looking to do this in Aggregate I can't help - but if you're building your own back-end server, I can give you some pointers.
NB there are some issues with identifying a device uniquely, and Google seem to be forcing development to identify users rather than device hardware:
For now, my modification to Collect's DownloadFormListTask.java obtains a deviceid from PropertyManager. If the device is a phone, this returns the IMEI - if not, it returns the wifi MAC address as a fallback. Either can be stored on the server, so that the requesting device can be identified by appending this ID to the formList URL.
But if future versions of Android prevent apps from identifying hardware, as Google seem to intend, it will be necessary to switch to some kind of user authentication.


1 Like

Nik, Hi!

I am very interested in the customized PHP/MySQL dashboard you have. Can you please share more info on personal messaging? Many thanks!


In general, if this is something that doesn't need to be private, it should be done in public, perhaps in the Development topic.

The more others see what is available in public, the more they can build on it, or contribute, or not duplicate efforts.

1 Like

@Blitheringeejit Hi Nik, is it possible for your to share the PHP/MySQL server you mentioned about, above? Many thanks!

Hello friends,

Is this feature implemented? Issue on Github is closed. I am not too familiar with Github to check the status.

Our organization is also looking for similar feature to give form access to specific users.

Any help in this regard is greatly appreciated.


This feature isn't implemented in ODK Aggregate. At this time, major features aren't being added to Aggregate (see this topic for more information). However, this feature was recently implemented in ODK Central. Central lets you use Projects to partition Forms and users, and also allows you to manage Form access within a Project.


Good day! I need to get access to the forms. How do I do it?

Hi @Unijoegrace! If you want to learn more about ODK Central and how to use it to manage form access, check out the introduction to Central. Follow the instructions there to try it out on the sandbox or your own machine.

1 Like

Ok thanks :+1: I will try it out