I think before we get too deep in the guts of what things should look like, we should first discuss the goals of the project. I've had many people ask me about this sort of thing - usually they are starting a new project and want to get the security part of their app (data model, data access, UI for managing, etc.) up and running quickly. They don't want to have to think about the data model, building user interfaces for managing it, etc.

I think that as the applications grow, the users may then want to extend our data model to add additional fields, etc.

The goals I would have for the project would be:
1) Provides a basic data model that can be used out-of-the-box
2) Provides a war that can be quickly and easily configured and deployed to manage security configuration (no coding required!!) 3) Provides data access objects that can be used out of the box, or replaced if desired (at least JPA, maybe LDAP)
4) Allows a user to optionally replace or extend our data model
5) Provide this as an optional extension to JSecurity (a completely separate module) and not something that is added to the core or required in any way

Therefore I think it makes sense to:
a) Model the data as a set of interfaces that most of the module code would reference b) Provide basic implementations of this data model that are suitable for JPA persistence or LDAP c) Provide a service layer for managing the objects that is independent of our data access strategy. I think this service layer should be totally separate services (managers) from the ones in jsecurity-core. d) Provide DAO interfaces with a couple of implementations - allow the user to substitute in their own DAO if desired e) Provide a web layer that uses the service layer to manage security objects. f) The web interface should be a modern, simple, clean interface that allows creating, editing, deleting users; creating, editing, and deleting roles/permissions; creating, deleting, and assigning users to groups (once jsecurity-core supports the concepts of groups)

Jeremy

On Mar 19, 2009, at 9:11 AM, Les Hazlewood wrote:

Hi Heshan,

I think this is a great idea, but it will require some decent thought.

Currently JSecurity's API is essentially read-only. We do this because the data model can and does change significantly across projects. So, we have
things like AuthorizationInfo and AuthenticationInfo interfaces that
end-users can implement and return from their Realm implementations which
abstracts away their environment from JSecurity.

If we would be able to write to one or more datasources, we'd also have to
create an API for the concepts that JSecurity does not currently read
explicilty.  I'm thinking of Interfaces like:

Group
Role

Maybe we need another Interface like Account to make the associations
between Group and Role (account.getGroups() or account.getRoles()).

Or maybe there isn't an Account, and we just use Subject for that
(Subject.getGroups(), Subject.getRoles()), etc.

Role.getPermissions(), Group.getPermissions(),etc. These are all things
that need to be decided upon.  I've done this _many_ times in real
applications, and maybe the modeling I have done can be re-used to a large extent. It is very flexible and handles for a large variety of domain model
permutations - something that would be necessary for supporting many
applications.

Then, after that is decided, we need to come up with a 'service' API that could be called to make the associations. Maybe that service is just the
existing SecurityManager interface.  Things like:

createRole( Role role );
addRole( PrincipalCollection subjectIdentity, Role role );
deleteRole( Serializable roleId);
addPermission( Serializable roleId, Permission p);

etc.

Then we could call this service API to make the changes at runtime. Then that service would probably delegate to the internal collection of Realms to allow each to respond to the call. The SecurityManager is probably the best candidate for this type of service work, as it does the same thing but for
existing read-only operations.

The user agent layer should only just call methods on the SecurityManager
such that any user agent technology could be used (command line, web
console, swing/flex app, etc).

Anyone else have any thoughts or ideas?  Any questions Heshan?

Cheers,

Les

On Tue, Mar 17, 2009 at 10:59 AM, Heshan Suriyaarachchi <
[email protected]> wrote:

Hi Guys,
I'm planning to take part in Google Summer of Code this year. I thought of doing a UI Management Console for managing Groups, Users, Roles, and Permissions for JSecurtiy aka Ki. I need to start on working on a proposal for GSoC. Therefore I would like to know your feedback on how the
Management Console be implemented and what functionalities should it
support.

--
Regards,
Heshan Suriyaarachchi

http://heshans.blogspot.com/


Reply via email to