Andy,

Thanks for bringing this up. There have been some security implementation issues in the back of my head for a while now, and I guess this is a good time to bring them up.

1. I would like to see the security java class extended to handle things like this, PLUS have it extended to handle the permissions & password maintenance. Here's why: if all security operations (CRUD permissions + authentication) were handled by a single java class, then that single class could be replaced with a custom implementation. The framework provides some of that capability (http://ofbizwiki.go-integral.com/Wiki.jsp?page=Securitydeveloper). What I'm picturing is something like moving the securityext services to the org.ofbiz.security.Security interface. In other words, the interface would create/update/delete permissions/passwords in addition to checking them.

If that was done, then I could do exactly what that wiki page says - extend org.ofbiz.security.Security, write my own security handler, and that's it. Right now I would have to write my own security handler PLUS write my own version of the securityext component.

If ALL security operations were handled through a single security interface, then I could swap out OFBiz's security scheme with, let's say, an LDAP version.

2. I would also like to see the security services handle the concept proposed in https://issues.apache.org/jira/browse/OFBIZ-455. Right now that issue is "in my court" and I've been thinking a lot about it lately. What I've concluded is that I would be developing a set of services that parallel the security services. It would be better if the security services could accomodate this kind of parameterization.

This could be accomplished by extending the security interface to check permissions for ANY OBJECT, instead of just user login IDs. The main weakness in OFBiz's security implementation is the assumption that permission checking will be done only on users.

If that change was made, then any type of permissions checking can be performed.

Example:
Object A wants to modify Object B.

Implementation:
If Object A and Object B are members of the same permission context, then
If Object A has modify permission in that context AND Object B has modify-able permission in that context, then
    Object A granted permission to modify Object B




Andrew Zeneski wrote:
It is my believe and I am sure there are others who agree, the base permission scheme in OFBiz just doesn't cut it for application specific security.

What I want to propose and make an initial decision on is a generic schema for developing custom security implementations for specific application purposes.

What I checked in to SVN today is an initial idea I have for implementing this. I called it ServiceSecurity.java. In any service definition you can specify a class to call to decide if a user has permission to invoke the service.

Since this is a generic interface this allows the following:

1) A simple method implementation. We can implement this interface to call a simple method which would return a boolean. Then security permissions can be implemented using simple methods (i.e. there are a number of these types of methods already in OFBiz today, so this would be a good first step).

2) A service implementation. Having a interface service which returns a Boolean object to decide if the user has permission.

3) A custom Java implementation. Create a new class which implements this interface which has a single method hasPermission().

The reason I went this direction was to provide a very generic and flexible way to implement security. It has been brought to my attention that all we really need is to do this via a service, which in turn could be simple method, java or whatever.

I am now opening the floor to discussion; should we stick with a generic interface and implement various classes to handle different options, change this only operate as a service call, or should we do something completely different.

As always the decision made here is never final, technologies may change, new ideas arise, but what I really want to do now is settle on our initial plan of attack.

To see what is there today, see the new ServiceSecurity.java interface and the permission section of a service definition (services.xsd).

Andrew



Reply via email to