A client of mine at NS Web Solutions
is looking to solve a problem involving the way their users need to handle reports. I think this might be common enough to be relevant for others, so here's a bit about what we're planning to do.
This group has a large number of users who all rely on a variety of existing reports to do their work. When a report isn't just exactly right, users with "access Report Criteria" permission have the option to change the report criteria to modify the report, but of course that's only for a one-time use; if they want to use those same modified criteria the next day, they have to configure them all over again. To get that that configuration saved for later use, they need someone with the "administer Reports" permission to re-create the report just as they want it, and save it as a permanently available report.
The problem here is the bottleneck in new report creation. The more users a system has, and the more dynamic their business policies are, the more this bottleneck is felt.
A bad solution would be to give the "administer Reports" permission to everyone who wants it. This is bad because then you have lots of people modifying system-wide reports, so that reports are no longer predictable and reliable. If Bob changes a report's filter criteria in the morning, Alice will easily be confused by the report in the afternoon, because it doesn't contain what she expects.
A better solution is something I think will work for this client, and hopefully for others who may be feeling this particular kind of pain. The basic idea is to give users some space to play with reports without polluting the site-wide report space. We create a new permission called "administer own CiviCRM reports", and users with that permission can get a little freedom:
Starting with an existing system-wide report, the user can modify the report criteria and then save this configuration as a new report. Let's call this a "user-private report" for now, and debate a better name later. A user-private report is only visible to the user who created it, and can be modified and saved, or copied again, by that user only.
Any user with CiviCRM's "administer Reports" permission could then, at his or her discretion, promote any such user-private report to be a system-wide report, which would then behave exactly as any other system-wide report, meaning it would be visible to other users, can't be edited by the user who created it, etc.
At this point I'm planning to build this out as a freestanding Drupal module and release it under GPL at Drupal.org. It will be good to see if this is at all useful for other CiviCRM users and installations.
A short list of requirements for this module looks something like this:
Each user has a private space for reports visible and editable by that user alone.
Users can copy any report that they can access into their own private report space.
Report listings do not show user-private reports, except those belonging to the current user. (This includes civicrm/report/list; I'm thinking it will be hard to block these reports from the CiviCRM navigation menu, and the simplest thing might just be to disallow private reports from being added to the navigation menu.)
Any user-private report must refuse access by users other than the owner.
Users must have CiviCRM's "edit report criteria" and this module's "administer own CiviCRM reports" permissions to use these features.
I'm looking forward to any feedback from the community on this concept.