Application Access Control List


General J2EE: Application Access Control List

  1. Application Access Control List (2 messages)

    Hi there,
     I would just like to ask anyone out there who has ever programmed an application that allows an administrator(through a web interface) to control which page or option or field of a form are available and whether they are read only , editable or not, whether a user has the rights to delete or not based on the authorizations a person is given. I am sure there are applications out there that have been developed with such features but how messy or complicated were they?

    currently, the only thing i coud think of is using custom tags and surrounding the element of a form and the custom tag will check if the current user as rights to element of this form, if the user does, the custom tag will display the element but if it doesnt, it will not. but however, this approach also has its disadvantages: what if i have client side scripting that references this element and the user does not have acccess rights to this element, wont that result in a javascript error? or do i have to surround the script that affects that element with a acl custom tag as well? if that is the case, wouldnt that be very messy? in such an approach, i think i would have to give a unique identifier to each and every element, page, form, and that information would be stored in the database but i think that would be extremely hardcoded cos the application needs to know the link between the identifier in the database and the element in form and for that to happen, the identifier of the element would have to hardcoded into the jsp page for example.

    to programme an application with page control(controls which page a user can see or not) is not too difficult but to not only control that page access and also the visibility of those fields in that page and its properties such as editable or not, i think it might be quite a headache

    if i were to store all these access control list information in a database, how would the information be organized ?

    i have come across applications that store references to elements to a form in a page as a "page.form.element" string so that at first glance, it becomes immediately recognizable in the database to a human to which element in the form does this permission belong to and the application also uses this string(the identifier) to match its permissions according to the the user rights.

    is there already a design pattern out there already for this issue? I hope seasoned developers might be able to give me some pointers or shed some light into this issue cos i think a lot of people might faced the same task and go about it in different ways, some better than the others , some worse

  2. Hi Benjamin,

    I was recently involved with a project that wanted to do something similar. They 'needed' fine grained access control for every screen element (forms and content) based on user roles. And, of course, configurable at runtime via some web pages.

    Our approach was similar to what you described - wrap critical sections with a guarding tag:
    <security:hasPermission name="<%= Permission.EDIT_PERSON_SOCIAL_SECURITY_NUMBER %>" >

    The Permission object defined constants in the format of PAGE_NAME_SCREEN_ELEMENT_NAME. The Permission object validated itself against values in the database at system startup.

    The servlet/action that received the form needed a similar check to avoid accepting an empty value by accident and to prevent the 1% of 1% that might hack the value into a HTTP get/post.

    We did not go ahead with this approach for several reasons:
    1. Our JSP and servlet/action code would be very messy. And yes, your client side scripting code would have to be aware of the security issues. It is really nasty.
    2. The development time to create the infrastructure, cost to retrofit 10% of the project that had been delivered, and overhead cost to do it for every JSP and servlet/action going forward.
    3. After further discussions with the client, the areas of security concern were places where user roles overlapped. The application had a handful of these areas so we took the easy way out by creating some role specific pages.

    Here is what I suggest:
    1. Talk with your client/requirements/whoever folks to determine whether you need an application wide solution.
    2. Examine what template engines have to offer.

    I hope that helps. Good luck,
  3. Hello Richard,
       Thanks for your help. I appreciate it very much, didnt expect an elaborate answer but the details sure helped. You have been very kind. At least I now know that I am not the only one facing this problem. Thanks a million!!!