Chuck Zheng wrote:

> Hi again,
>
> I am thinking more generic means than isCallerCanAccess(data).
>
> Since each applicaiton/domain will have its own specific security policy, 
>implementation
> of the above call will be hard to generalize.
>
> What I am thinking is that if we allow an EJBean to register (in its DD/or 
>somewhere) with
> the container a class implements a Authorizor interface, and a class that implements
> SecurityData interface as below:
>
> public interface Authorizor
> {
>   void hasPermission(SecurityData data) throws ecurityException
> }
>
> public interface SecurityData //or abstract class?
> {
>   // concrete class must have a constructor
>   // or a factory method registered with the container via DD
>   // the signature of the ctor and factory method may need
>   // to take params of the EJBean's params.
> }
>
> This is very much like register a comparison operator with C++ STL/Rogue collection 
>(hash,
> stack, etc) template.
>
> Upon an invocation of the EJBean, the container will constructs an SecurityData 
>object
> with appropriate params, (invoke via reflection may be needed)
>
> Then the container invoke the Authorizor.hasPermission. The EJBean's method won't be
> entered if the authorisation failed and the EJBean's method need not to perform any
> further authorization.
>
> Since concrete Authorizor and SecurityData class are supplied by Bean Provider, s/he 
>can
> code any security rule needed by the specific application domain, as well as pick 
>any data
> they want to use for authorisation.  There is coupling between these Authorizor and
> SecurityData concrete classes.
>
> Is this approach feasible?  Any show-stoppers?

You've changed my proposal in two ways.
(1) You have used a SecurityData class to encapsulate the data needed whereas I 
proposed a
String.
(2) You have specified that the authorisation check should be done by the container 
whereas
I proposed that the method would do the check explicitly.

I'm happy with your first change, however there are two interesting requirements that 
your
second change does not satisfy:
- the data resource being protected may not be known by the deployer - it may be 
supplied by
as a parameter to the method. (e.g. a getRowAsString() method that takes databasename, 
etc
as parameter), or
- the method may only access the data resource under certain circumstances (e.g. a
checkLoanDetails() method only accesses the sensitive CompulsiveGambler database for 
loans
over $1M, and only supervisors can process such big loans.)

Hence I'd prefer a flexible API to the additional deployer-determined security check 
that
you are proposing.

Ian McCallion

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff EJB-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

Reply via email to