Building a download area with users and groups taken from an external database

2.1k views Asked by At

I'm searching for a free and open source document/content management system (web-based) to implement a download area, where some people can upload files, someother can download them, depending on permissions. It must be possible to create folders (for organizing the files) and to set permissions on both files and folders.

I already have database tables with users and groups of users (used in my main web application) and I would like to use the same users and groups in my new DMS webapp for granting permissions. Obviously avoiding to handwrite or to hardcode these data. In this way I could modify the data directly in the original DB in the future and it will remain up to date in the DMS.

Is there a DMS that allows to set where it has to retrieve users and groups data, also defining in which database, tables and fields? Or something else not so far from this.. like batch procedures that copy users and groups from my webapp DB to the DMS DB.


Here the products I already tried without success, grouped by the reason of discard.

Purpose problems:

Access control problems:

  • Jease: would be great (so simple and clear!), but it doesn't manage groups and permission for users are over entire folders (where users can do everything with the files, not only view them)
  • InfoGlue: good users and groups management, but permissions are only on folders and contents are not files but articles/images/templates/etc.
  • LogicalDoc (ex Contineo): great CMS, with revision management etc., but permissions are only on folders
  • jAPS: built for creating sites, with permissions only for groups, not for users
  • Joomla! with DOCman component: permissions can be granted only to 1 user or 1 group
  • Nuxeo DM: it's a good DMS, but for collaborative work (not so suited for a download area), but the main problem is that permissions are only on folders, not on files
  • Xoda, KRYSTAL DMS, yaDMS, PHP Navigator, DocumentManager: very simple, but permission only concerns global access to the system
  • MeshCMS, Kordil EDMS, Simple Document Management System: very simple, no groups, no access control on files/folders
  • eZimDMS: groups are not used for permissions on files/folders, but only for 3 global privileges
  • OpenDocMan: similar to what I'm looking for, but groups are treated as departements, DB tables miss primary keys and you can't create folders; I like its easyness, but globally it doesn't seem so well done

Platform problems:

  • Contelligent, Xinco DMS, jLibrary: its client is a desktop (not a web) application (for the second you have Java Web Start)
  • OpenKM: it's good, but it must work only inside jBoss and not in my Tomcat

Installation problems:

  • Apache Lenya: I don't know if it's ok because I could not make it work and demos doesn't work..
  • Owl Intranet Engine: it has bugs and I can't understand how it works
  • DocMGR: supports LDAP, but I could not make it work; moreover doesn't support IE7
  • Epiware: no free version for Windows (unfortunately I'm under Windows)

Reliability problems:

Thanks!

6

There are 6 answers

0
bluish On BEST ANSWER

I finally decided to use a commercial client-server DMS and built on top of it a webapp for retrieving documents and their relationships. Documents access control is managed by the DMS, given username and password. Users and groups can be easily added to the DMS. This is the infrastructure:

                      SOAP                   WCF connector (DLL)
webapp (JSP, mapping) ----> web service (C#) ------------------> WCF (DMS server)
1
Babak Naffas On

Joomla! with DOCman component: permissions can be granted only to 1 user or 1 group

This should actually work for you. You can create a single group for the file you want to manage and add/remove people to that group as they gain/lose access to the file.

0
Richard Frovarp On

Apache Lenya could work. You'd have to write your own authentication mechanism and group management code to sync over the users from the DB. Any product is going to give you difficulty going against a proprietary DB. If you were able to put the user and group data into a directory, say LDAP, your problem becomes a lot easier.

2
daco On

so... to make thinks clear, you need:

  1. Free and Open Source System
  2. Download Area (upload and download)
  3. User Roles
  4. Make use of external DB
  5. to have some sort of automated process to use the user data in the external DB

I those would be the main points (If I missed any, please add them as comments to update this answer)

  1. I would go with Drupal http://drupal.org
  2. In drupal you can create custom content types and set the system up to almost whatever you want. In this case I would recommend you to use the following modules:

  3. User Roles can be managed with the built-in options plus per field permissions (available with the content module). You can assign as many roles to an user as you want

  4. Using the User Import module you can import users in many ways, but it isn't that automated. You will have to export your user db as CSV and then import it into drupal. The modules then allows you to map the fields.

  5. You may automate the complete process by using cron or replacing the User import module with the instructions found in http://island.byu.edu/drupal/content/drupal-6-external-database-authentication-roles

The steps should be:

  1. Install drupal 6 (mysql+php) [you may also go with drupal 7 but right now there are more tutorials and module sfor drupal 6, as d7 just went out, and the user import module is still not available for d7]
  2. Enable the modules I recommended
  3. Create a new content type (ex. File) and add a filetype field
  4. Create a taxonomy vocabulary to create "categories" for the files and assign it to the "Files" content type
  5. Create some roles (ex. editor, owner, read-only and so on) and assign different permissions depending of what you want each role to do
  6. go to the User import module and import your user db (you can also update the existing users) and map the fields (the important ones are username, password, roles) to the fields in your csv file
  7. create some views to show the content (files) like you want (for example, by category), by role, etc...

I think those are the basic steps to have a working download area like the one you want. Of course you may customize it as much as you like (that's the power of drupal) by adding more modules ( http://drupalmodules.com/ is a really good place to start )

Once you have the basics working you can start playing with panels http://drupal.org/project/ to customize the layout of the entire site and check some of the themes in http://drupal.org/project/Themes to change the look&feel of your site (you can also go with pure css)

I hope it helps. If you want to add another feature to this solution or something isn't clear enough please let me know.

Cheers!

0
bluish On

I found these possible solutions:

  • LetoDMS (ex MyDMS), written in PHP, has it's own users and groups tables, old-fashioned style, less user-friendly
  • Quotero, written in Java, with LDAP, Active Directory, Joomla authentication support; more custom authentication sources can be built (starting from this tutorial); it's project seems more active; it has the most user-friendly and modern layout

Even if it has some bugs, I've choosen Quotero, for the above reasons. It's extensibility (relative to what I need) surprised me.

How I installed (in Tomcat 6 on Ubuntu Server 10 and Tomcat 7 on Windows 7) and integrated it with my main webapp:

  • install MySQL, PostgreSQL, Oracle DB, SQL Server or another DBMS (the last requires customization)
  • download quotero-deployer-2.0.war
  • place quotero-deployer-2.0.war in Tomcat webapps
  • browse to http://localhost:8080/quotero-deployer-2.0 and use the wizard to configure your installation (see quick install tutorial)
  • the wizard will create the DB and 2 .war in webapps folder: QuoteroServer and QuoteroClient; users will use the latter
    • in Linux systems it will probably place these webapps in /usr/share/tomcatx/webapps folder; if you need them in /var/lib/tomcatx/webapps, just move them
  • write your custom classes for the authentication source, following Joomla15's example and this tutorial
    • org.coretechs.quotero.user.impl.AuthenticationSourceFoo (the main class; it handles also the parameters asked in domain creation)
    • org.coretechs.quotero.user.impl.factory.foo.FooUserFactory (interacts with users table)
    • org.coretechs.quotero.user.impl.factory.foo.FooGroupFactory (interacts with groups table)
    • org.coretechs.quotero.user.impl.factory.foo.FooDBManagerDB2 (interacts with the DB)
    • org.coretechs.quotero.user.impl.factory.foo.FooPasswordHash (implements custom password hash algorithm)
  • insert such classes inside an Eclipse (or similar IDE) project, setting the build path with all libraries you can find in QuoteroServer/WEB-INF/lib and QuoteroClient/WEB-INF/lib
  • generate a .jar and place it in QuoteroServer/WEB-INF/lib
  • place the .jar with your DB driver in the same folder
  • browse to http://localhost:8080/QuoteroClient, log in (default username is admin and password admin)
  • open Toolbox > Administration > Domains and add a new domain, choosing as Domain Type your custom authentication source and setting the parameters, such as DB URL, username and password

In this way you can log in with the accounts belonging to users and groups of your main webapp (or whatever application with users and groups tables in a DB!) and also permissions on files and folders of Quotero DMS can be referred to those ones. Other data, such as permissions, documents, tasks, workflows, user and groups belonging to classical domain, will remain in the Quotero DB. So you have 2 DB: one for the whole Quotero DMS and one (already existing) where Quotero retreives users and groups (no need to replicate these data).

EDIT:

I had to face some bugs that compromise the working of Quotero... so I had to abandon this solution.

0
Scott Warren On

I am not sure if this answers 100% of your issues however I have used Daisy-cms as a document management system.

With Daisy you can setup Attachment documents or your own document types. You cannot create folders however you can have access (this is the tricky part) based on Values in the fields.

It's open source, simple to install against MySQL and point and click for most of what you want to do.

Hope this helps.