Forum OpenACS Q&A: Re: Hosting a searchable mail archive

Posted by Andrew Piskorski on
Robin, no, the Static Pages package is not limited to content under myserver/www/ (the web root), it will work just fine with pages under myserver/mypackage/www/ too. (It did the last time I used it for that anyway.)

I don't see why you'd want to use File Storage. These old email archives aren't files that people are going to be uploading, downloading, modifying, etc., right?

If you use Static Pages, there might be a better way to do it, but worst case, you can always handle the access control with an AOLserver registered proc or filter. That wouldn't be too hard.

Besides the searching part, what you've got here is a permissions mapping problem. In general, one way you can always solve that, is make your own little OpenACS package to model the mapping in the RDBMS. Create one acs_object for every entity you need to set permissions on. E.g., if the finest permissions granularity you need is "email list name", then you just create one acs_object for each email list. And set the permissions the way you want on those acs_objects - e.g., only readable by members of such-and-such group.

Once you have your permissions modeled in the database, then all you need some Tcl code to enforce those permissions. Basically, that means write some Tcl code to intercept requests for the URLs where the email archives actually live, figure out what acs_object maps to that URL, and do a permissions check on that acs_object. An AOLserver registered filter or registered proc is the most traditional way to do that. Which probably seems familiar from OpenACS 3.x. :)

There might be and probably are handier or better ways to use various OpenACS facilities to accomplish the same thing. .vuh files, the subsite stuff Randy mentioned above, etc. But it's all definitely doable.

Oh, and of course, every OpenACS package you create automatically comes with at least one acs_object you can set permissions on - the package instance itself. So in some cases, you might not need to write any data model at all, just mount, say, 5 instances of your package, one for each of your 5 email archives, set permissions on each package instance, and poof you're done. The ACS Request Processor automatically enforces permissions on mounted package instances, so the "write some Tcl code to enforce the permissions" part has already been done for you.

It's been a long time since I looked at Static Pages, but if I remember right, the simplest way to do this is probably to mount one Static Pages instance for each email archive sub-tree that you want to set permissions on, and just set permissions on each package instance. If that doesn't fit well with the content and access control you need, then probably fall back to writing you're own little data model and code to enforce its permissions.