[security-dev] IDM security model - Human vs Non human users

Shane Bryzak sbryzak at redhat.com
Thu Oct 18 07:52:46 EDT 2012


Bolek and I were discussing $SUBJECT quite some time ago, and we came to 
the conclusion that it would be nice to be able to differentiate between 
users that are human, and users that are not. I hope that everyone can 
appreciate why this might be important for today's interconnected web.

Anyway, I've been contemplating an elegant way to implement this, and 
I'd like to run the following idea past you guys.

Currently, the User interface extends IdentityType, like so:

     public interface User extends IdentityType

This interface declares mostly human-specific methods (besides getId() 
and possibly get/setEmail()):

     String getId();

     String getFirstName();
     void setFirstName(String firstName);

     String getLastName();
     void setLastName(String lastName);

     String getFullName();

     String getEmail();
     void setEmail(String email);


What I would like to do, is introduce another interface in between User 
and IdentityType, called Agent:

     public interface Agent extends IdentityType {
         String getId();

         String getEmail();
         void setEmail(String email);
     }

The User interface would then extend this and provide the human-specific 
methods:

     public interface User extends Agent {
         String getFirstName();
         void setFirstName(String firstName);

         String getLastName();
         void setLastName(String lastName);

         String getFullName();
     }

This change would require some modifications to the IdentityManager 
interface.  We currently have the following user-related methods:

     User createUser(String name);
     User createUser(User user);
     void removeUser(User user);
     void removeUser(String name);
     User getUser(String name);
     Collection<User> getAllUsers();
     UserQuery createUserQuery();

(as a side note, we will probably remove some of these methods for 
simplicity sake)

I see two choices here; 1) we can either leave these methods as-is and 
add another set of methods for Agents (createAgent(), removeAgent(), 
etc), or 2) we can update the methods to work with Agents instead of 
Users (as a User is an Agent anyway).  I am kind of leaning towards 
option 1) because it keeps it simple and intuitive for developers, but I 
also like option 2) because it reduces the overall number of methods.

That basically sums up the idea.  This will give us support for 
non-human connections to an application, and provides some 
future-proofing should any similar requirements come along later. I'd be 
interested in hearing any feedback on this, for the overall idea in 
general and specifically for the IdentityManager changes.

Shane



More information about the security-dev mailing list