Hi,

I'm a software engineer at Lulu.com. As part of the community features on our site, we allow users to maintain blogs there. However, the system that is currently implemented is very old/slow/ugly/hated. We have a relatively large user base, but only 6k have ever posted to their blog, and only 500 of those within the past thirty days. As you can tell, there's a lot of room for improvement, so we recently decided to start working on a Roller deployment to provide a new blog system for Lulu.com. I just wanted to introduce us and make you aware of our desire to work with the greater Roller community to share knowledge and effort where possible.

I'm attaching a preliminary "here's what we might need to do" document I wrote up, covering the work needed to integrate Roller into the rest of Lulu.com. A chat a while ago with Dave provided a lot of good insights on some of this stuff. Advice in any and all areas is definitely welcome.

Unfortunately I won't get the chance to be heavily involved in the implementation work, but my colleagues Clinton (Lulu engineering), John (Lulu user experience), and the rest of the community team are planning on making it happen. Clinton is managing the bigger-picture aspects of the community team as well, so he's a good person to mention things to like "You should base your Roller work on 4.0, because it's coming out tomorrow" or "You people are crazy, don't use Roller!" :)

We're looking forward to creating a great blog system and working with you guys. Thanks so much for the work you all have done thus far to make it fit our needs so well! Feel free to let me know if I can help with anything.

Best,
-- Elliot

User DB:
        Roller's src/org/apache/roller/business/UserManager.java class should 
probably be fixed up a bunch - it would be nice to pull UserData directly from 
Lulu, rather than having it replicated to the roller database.

        src/org/apache/roller/ui/core/security/CustomUserRegistry.java is a 
relevant class in this area.

Authentication:
        We'll need to implement a new ACEGI auth provider (see 
acegisecurity/core/src/main/java/org/acegisecurity/providers).

        Getting the Lulu cookie working properly will require some extra 
machinations beyond just an auth provider, since it requires interacting with 
HTTP requests and such. See in particular 
acegisecurity/core/src/main/java/org/acegisecurity/ui/rememberme and 
acegisecurity/core/src/main/java/org/acegisecurity/providers/rememberme. My 
guess is that our Lulu auth provider will only use the Lulu cookie to auth 
internally, and redirect people to the site login page if auth fails (with 
fReferer set appropriately).

        One of the existing providers can be used as a template without too 
much trouble - my guess is 
        that rememberme is the best place to start. I believe the 
authentication work can be done without 
        a huge investment of time.

Authorization:
        Unfortunately, parts of Acegi and Roller use a different paradigm than 
LPermissionManager [a proprietary authorization system in use for Lulu groups]. 
LPermissionManager operates under the "ask me and I'll let you know if you can 
do it" approach, while Acegi and Roller seem to favor the "I'll give you a list 
of everything you can do" approach.

        There are authorization-related pieces of Acegi that Roller really 
doesn't use. In particular, it looks like the normal Acegi authentication 
provider interface includes the ability to pass back "Granted Authorities" as a 
result of authentication. While this paradigm doesn't work well, there is the 
ability to implement a more sophisticated authorization provider that better 
fits the Lulu LPermissionManager paradigm.

        However, Roller does not currently use Acegi for authorization, making 
things even more difficult. On a global level, there are 'user' and 'admin' 
roles that each user can have. On a per-blog basis, there are 'Limited', 
'Author', and 'Admin' roles that a user can have (in addition to having no role 
at all). The mechanism for storing & retrieving these roles is pretty much 
"hardwired POJOs with hibernate for persistence", but it'd be nice to find a 
way to abstract that a bit.

        So far, I think the right thing to do might be to have Roller start 
using Acegi for authorization, but that type of work should really go upstream, 
so we should get Dave in the loop.

        Something I haven't done yet is find the places in Roller & Spring that 
utilize the Roller roles mechanism for authorization. These would be the places 
we'd need to change Roller.

        If we can figure out a way to get Roller delegating authorization 
decisions to LPermissionManager, then LPermissionManager would need to have a 
check added for a 'blog/post/add' operation (replacing the 
'group/blog_post/add' one that is already there) and other operations as 
relevant.

Blog creation:
     We have the bad habit of creating a blog/storefront/etc. for users as soon 
as they sign up for a Lulu account. This isn't efficient, and it has added to 
our migration headaches for storefronts. It doesn't necessarily have to be 
something the user is aware of, but it might make more sense to create a Roller 
blog for a user when they first click on the 'my blog' link from the left nav. 
Doing this would also give UX the opportunity to do a "first time flow" on 
blogs similar to what we have on storefronts.

     Group blogs can be created in a fashion similar to user blogs. Roller's 
blogs need to be owned by a single userid, but its authorization system gives 
it the ability to give multiple users access to one blog. I suggest having 
group blogs owned by a generic system userid, and then giving group blog access 
through the authorization system based on group membership.

Fixing up password change and user creation entry points:
       This can hopefully be done on the UX side of things, by pointing at 

Maintenance issues:
        Hopefully most of our code-level changes can either be contained in a 
separate module, or fed back 
        upstream. The main issue may be modifications to the JSP & Velocity 
templates, which seem a lot 
        harder to modularize.

Reply via email to