Hi Burke,

I was definitely expecting this response :) I am not suggesting that we re-create a duplicate application-level privilege for Managing Concepts necessarily. What I am suggesting is just an extension of what Dave and Mark have already suggested - that our application should have a different type of "privilege" that allows for showing / hiding or enabling / disabling features, which is based on the granulariy of the application and not based on the design of the API. And it should be clear how to "customize" the features available by role using these privileges without unintended side-effects.

The reality is that there is already an out-of-the-box mechanism for bypassing privilege checking - it's called the "System Developer" role. Many implementations use this role more than they should because they do not trust, nor do they know how best to configure, what privileges they need to use the application. Situations that Mark describes where one part of the application bombs due to some privilege check that is totally irrelevant or designed for a different purpose is not uncommon. So many implementations just give out the System Developer privilege to let their users get on with it and use the system, rather than continually deal with this support issue.

Ultimately, what I am proposing is a solution that would make the System Developer role more secure, by eliminating the automatic pass it gets on the Application-level, while still supporting it on the API-level. So, although I agree that this is not necessarily our strategic long-term solution, I fail to see why it would be a bad idea, since it would make the application more secure, not less secure, than it currently is, and would provide infinitely more possibilities for implementations to customize their UI experience for users in different roles.

Cheers,
Mike


On 05/18/2012 12:17 PM, Burke Mamlin wrote:
I agree that we need to improve privilege-handling, but I don't agree that the best approach is to disable/bypass all API privilege checking.

Are you suggesting that re-create a duplicate application-level privilege for Managing Concepts and bypass the existing privilege for manage concepts? Should anyone using the application be able edit users if they can find the right URL that lacks the application-level privilege checking? I 100% agree with improving permission handling to make things more manageable, but I don't agree with wholesale bypassing of API privileges any more than I would propose solving a Tomcat permissions problem by running it as root. API privilege checking is there for a reason. And, while there are many cases where application-level privileges are needed/justified, there are many cases where separate application-level privileges would only be redundant.

Making the changes planned in the sprint, providing an easy mechanism for granting all of the "Get" privileges (e.g., an out-of-the-box role), creating some conventions for handling application-level permissions, and having improved tools for troubleshooting privilege problems should go a long way in improving the situation without having to completely disable any API-level security.

-Burke

On Fri, May 18, 2012 at 11:52 AM, Mark Goodrich <mgoodr...@pih.org <mailto:mgoodr...@pih.org>> wrote:

    +1 for this.  We also could provide a little bit of granularity by
    also creating a role where every read-only API privilege check passes.



    ________________________________________
    From: dev@openmrs.org <mailto:dev@openmrs.org> [dev@openmrs.org
    <mailto:dev@openmrs.org>] On Behalf Of Michael Seaton
    [msea...@pih.org <mailto:msea...@pih.org>]
    Sent: Friday, May 18, 2012 11:27 AM
    To: openmrs-deve...@listserv.iupui.edu
    <mailto:openmrs-deve...@listserv.iupui.edu>
    Subject: Re: [OPENMRS-DEV] Roles and Privileges

    In this vein, here is a use-case I would like to suggest, based on
    many of the great suggestions I've heard:

    * Create 2 types of privileges - API-level and Application-level
    * Provide a "System Developer"-like role in which every API-level
    privilege check always passes, but which Application-level
    privileges need to be set
    * Re-factor our Web Application to refer only to Application-level
    privileges

    This would allow for implementations, if they chose, to
    effectively turn off API-level privileges, but to still restrict
    the types of activities that users could perform within the EMR
    application.  We can debate around the merits of turning off
    API-level privileges, and whether or not they are necessary, but
    this step would go a long way to have OpenMRS "get out of the way"
    until better management of API-level privileges is supported.

    I think the above could be done within a Sprint pretty easily, and
    modules that currently do API-privilege checking would not be
    impacted, but could migrate over to the Application-privilege
    checking when appropriate


    ________________________________________
    From: dev@openmrs.org <mailto:dev@openmrs.org> [dev@openmrs.org
    <mailto:dev@openmrs.org>] On Behalf Of Mark Goodrich
    [mgoodr...@pih.org <mailto:mgoodr...@pih.org>]
    Sent: Friday, May 18, 2012 10:49 AM
    To: openmrs-deve...@listserv.iupui.edu
    <mailto:openmrs-deve...@listserv.iupui.edu>
    Subject: [OPENMRS-DEV] Roles and Privileges

    Yesterday I ran into a real-life roles and privileges problem very
    similar to the example problem I gave a week or two ago.  Sine
    this the roles and privileges sprint is upcoming, I figured I'd
    mention it here... I think we've already got these issues covered,
    but wanted to reiterate since it is a good "real-life" example.

    In the Provider Management module, the Provider Dashboard lists
    all of the patients associated with a Provider.  However, in the
    functional specs for Provider Management, there is a requirement
    to have a role for users who are able to manage providers but
    aren't able to view patient data.  For this role, the patients
    associated with a provider should not be displayed, but, instead,
    the dashboard should show the number of patients that a provider
    has.  But, in order for the Provider Management API to calculate
    this information, this role would need to have the "View Patients"
    privilege, or, at least, "View Relationships" privilege.

    As was suggested earlier, one solution would be to give the user
    the appropriate proxy privilege to do this calculation, but that
    seems like a bad solution.

    I'd actually be fine with giving this role access to the
    getPatients and getRelationships API method, as long as there was
    a way to do that without giving them access to patient information
    via the web layer.  It seems critical to me that API-level and
    UI-level privileges be separated out.  We have LOTS of privileges
    in attempt to allow for fine-grained access control, but those
    privileges are not always "grained" in a useful way.

    Actually, from a web application level, I don't think that
    API-level privileges are particularly useful, except last-resort
    defense in the case that UI privileges aren't properly set up.
     (However, I realize that they would be critical when using a web
    services access model.)  In fact, if I thought that the OpenMRS
    web-level privileges were well enough defined, I'd almost consider
    having an option/role that allows me to give a user all API-level
    privileges when they access OpenMRS through the web app.

    I just set up privileges for the Provider Management module
    yesterday, and what I did was define a set of UI-level privileges
    that I use to hide/display certain sections of the provider
    dashboard.  Then I created two separate, coarse-grained API
    privilegs: "Provider Management API" and "Provider Management API
    - Read-only" which I think should be sufficient for my use case.

    It might be valuable to have a way to group privileges... say like
    a "Patient Service API privilege group"? Of course you could do
    this via a role, but a "Patient Service API" role doesn't seem to
    be the way role was intended to be used.

    And finally, a big +1 for creating a module that records privilege
    checks to faciliate administration.  Yesterday I had to use a
    trial-and-error approach to figure out exactly what privileges
    were required to access certain parts of the Provider Management
    site so that i could define roles appropriately.

    Take care,
    Mark




    ________________________________
    Click here to unsubscribe<mailto:lists...@listserv.iupui.edu
    <mailto:lists...@listserv.iupui.edu>?body=SIGNOFF%20openmrs-devel-l>
    from OpenMRS Developers' mailing list

    _________________________________________

    To unsubscribe from OpenMRS Developers' mailing list, send an
    e-mail to lists...@listserv.iupui.edu
    <mailto:lists...@listserv.iupui.edu> with "SIGNOFF
    openmrs-devel-l" in the  body (not the subject) of your e-mail.

    [mailto:lists...@listserv.iupui.edu
    <mailto:lists...@listserv.iupui.edu>?body=SIGNOFF%20openmrs-devel-l]
    _________________________________________

    To unsubscribe from OpenMRS Developers' mailing list, send an
    e-mail to lists...@listserv.iupui.edu
    <mailto:lists...@listserv.iupui.edu> with "SIGNOFF
    openmrs-devel-l" in the  body (not the subject) of your e-mail.

    [mailto:lists...@listserv.iupui.edu
    <mailto:lists...@listserv.iupui.edu>?body=SIGNOFF%20openmrs-devel-l]


------------------------------------------------------------------------
Click here to unsubscribe <mailto:lists...@listserv.iupui.edu?body=SIGNOFF%20openmrs-devel-l> from OpenMRS Developers' mailing list

-- OpenMRS Developers: http://go.openmrs.org/dev
Post: dev@openmrs.org
Unsubscribe: dev+unsubscr...@openmrs.org

_________________________________________

To unsubscribe from OpenMRS Developers' mailing list, send an e-mail to 
lists...@listserv.iupui.edu with "SIGNOFF openmrs-devel-l" in the  body (not 
the subject) of your e-mail.

[mailto:lists...@listserv.iupui.edu?body=SIGNOFF%20openmrs-devel-l]

Reply via email to