app 1 has been developed years ago, and has been under continuous development since; the app is only intranet accessible.
app 2 will use some of the controllers & data of app 1 and will be wide-web accessible.
So the idea is to reuse the code & models of app 1:
- without duplicating the code
- with no direct access to models ( hmvc requests ? ), so even with an access to app 2 files it would be impossible to fetch data which should not be accessible ( ie: Model_MyModel::find('all') ).
I've also considered the modules (globals) solution but this will bring a lot of changes on app 1.
Say your app1 has a model in ./app/classes/model/admin/users.php, called Model_Admin_Users, in the global namespace. You can copy this to ./app/modules/admin/classes/model/users.php, which will then be the class \Admin\Model_Users.
Then change the original to: class Model_Admin_Users extends \Admin\Model_Users;
And your app1 would continue to function like normal, providing you gave autoloaded the Admin module.
There is never direct access possible to Models, only Controllers can be requested.
If you want controlled data access (something your second bullet suggests), the only way to solve that is to create an API (for example a REST api, with authtentication) in app1, and have app2 talk to that to request the data. There is no other option.