diotalevi has asked for the wisdom of the Perl Monks concerning the following question:
This is an application design question involving perl/PostgreSQL. I've been reading up on the Capability based security model and am at a loss for how this might play out in application code. I'll start with some links: Re (tilly) 1: Application Access Control, Capability Theory, [id://http://crit.org/http://cap-lore.com/CapTheory/ObExp.html|Objects and Facets], REST and capabilities (distributed model), Granovetter diagrams (and other stuff), E Language. I'm barely a novice at CapDesign. From the REST e-mail I picked up an initial idea on how to implement a Capability system in perl (more on that). I haven't read everything on these web sites (there's a whole heck of a lot!) but what I have hasn't been lead me to understand how to actually use Caps.
<pTo be clear, I'm going for an OO solution though I'd like to learn more on how to do Capabilities in general (in perl, obviously). The obvious caveats are that perl code itself must be trusted since it is too introspective for one part of an application to keep secrets from another (PadWalker, Devel::Pointer, unpack 'P', $address, etc (ignoring all the myriad prosaic ways to get there as well)). For my actual application I'll be doing something more conventional with ACL lists (because I can't implement Caps right now and don't understand it) so this is for the exercise and architectural insight.The REST e-mail has an idea on how to structure a capability system. A factory is given a URL like cap://object_reference/method and that might be a node's capability. So in this model perhaps objects don't actually get references to each other and just pass URI references around. Or something. You also layer on the idea that if you know the name of something you are authorized to use it. (I don't understand how that withstands bruteforce searches for "things"). The referenced discussion was also working in a distributed computation model which for most perl (and mine) doesn't hold true. It also helps if you go back to thinking of OO programming as being a network of objects passing messages around (aka method calls). So $object->garf is an example of sending the 'garf' message to '$object'. I guess.
So... help? I'm being vague and handwavey because I don't see how any of this actually happens. I don't imagine tilly (in the PM node which originally pointed me in this direction) was recommending this without a good reason or having ideas on how to implement it.
__SIG__ use B; printf "You are here %08x\n", unpack "L!", unpack "P4", pack "L!", B::svref_2object(sub{})->OUTSIDE;
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Using Capabilities?
by valdez (Monsignor) on Dec 13, 2002 at 20:50 UTC | |
|
Re: Using Capabilities?
by adrianh (Chancellor) on Dec 14, 2002 at 15:53 UTC | |
|
Re: Using Capabilities?
by diotalevi (Canon) on Dec 13, 2002 at 18:15 UTC |