You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@usergrid.apache.org by Paul Summers <50...@gmail.com> on 2014/12/18 20:51:40 UTC

User attributes

I'm looking for a best way to add collections of attributes to Application Users.  Is it possible to add arbitrary attributes directly to a User entity? For example, could I add a list of email aliases and a map of external credentials as follows?

{
    "uuid" : "5bf1047a-84b0-11e4-9e6d-db5a12633089",
    "type" : "user",
    "created" : 1418685371959,
    "modified" : 1418685371959,
    "username" : "First.User",
    "email" : "Joe.User@example.com <ma...@example.com>",
    "activated" : true,
    "picture" : "http://www.gravatar.com/avatar/b1d53d35ca78936063277655c1eafe47 <http://www.gravatar.com/avatar/b1d53d35ca78936063277655c1eafe47>",
    "emailAliases" : [ "j_user@example.com <ma...@example.com>", "joe_u@example.com <ma...@example.com>" ],
    "externalCredentials" :  {
        "username" : "joeuser",
        "password" : "$2a$10$zh0zBoA0rqm5OPcSbGPYP.gJ20K.d9W128hkmQBD4VfFlO5cNECdO",
        "encrption" : "BCRYPT"
    },
    "metadata" : {
        "path" : "/users/5bf1047a-84b0-11e4-9e6d-db5a12633089",
        "sets" : {
            "rolenames" : "/users/5bf1047a-84b0-11e4-9e6d-db5a12633089/roles",
            "permissions" : "/users/5bf1047a-84b0-11e4-9e6d-db5a12633089/permissions"
        },
        "collections" : {
            "activities" : "/users/5bf1047a-84b0-11e4-9e6d-db5a12633089/activities",
            "devices" : "/users/5bf1047a-84b0-11e4-9e6d-db5a12633089/devices",
            "feed" : "/users/5bf1047a-84b0-11e4-9e6d-db5a12633089/feed",
            "groups" : "/users/5bf1047a-84b0-11e4-9e6d-db5a12633089/groups",
            "roles" : "/users/5bf1047a-84b0-11e4-9e6d-db5a12633089/roles",
            "following" : "/users/5bf1047a-84b0-11e4-9e6d-db5a12633089/following",
            "followers" : "/users/5bf1047a-84b0-11e4-9e6d-db5a12633089/followers"
        }
    }
}

Would it then be possible to access the list of aliases directly for retrieval/update without having to retrieve/update/replace the entire user entity?

Would these new attributes be indexed, so I could search for a user with an email alias matching "juser*"?

Of course, this all falls apart if I can't add the attributes directly to a User.  I'd then consider creating a new collection of "UserFacets" that would be linked to the owning User by some combination of user ID and facet type name, as follows:

/org/app/Facets
{
    "name" : "5bf1047a-84b0-11e4-9e6d-db5a12633089:emailAliases",
    "aliases" : [ "j_user@example.com <ma...@example.com>", "joe_u@example.com <ma...@example.com>" ]
}

{
    "name" : "5bf1047a-84b0-11e4-9e6d-db5a12633089:externalCredentials"",
    "credentials" : {
        "username" : "joeuser",
        "password" : "$2a$10$zh0zBoA0rqm5OPcSbGPYP.gJ20K.d9W128hkmQBD4VfFlO5cNECdO",
        "encrption" : "BCRYPT"
    }
}

Would this actually be the preferred way of doing it?

Paul