Isn't that the opposite of what we want? Things should be more restricted if there is no user, and not less restricted. I may be misunderstanding what you mean by this though...

-David


On May 16, 2009, at 6:28 PM, Adrian Crum wrote:


The idea I had in mind was having the ability to assign a filter to an entity for access control scenario 3 - http://docs.ofbiz.org/x/ JR8. If a user isn't logged in then there is no filter assigned to the entity, so it operates normally.

Btw, I'm not going to write any code until we get all of the details worked out and finalize the design.

-Adrian

--- On Sat, 5/16/09, David E Jones <david.jo...@hotwaxmedia.com> wrote:

From: David E Jones <david.jo...@hotwaxmedia.com>
Subject: Re: Brainstorming: Security Requirements/Scenarios
To: dev@ofbiz.apache.org
Date: Saturday, May 16, 2009, 4:14 PM

Sorry for not getting back to this sooner. I spent a little
too much time on it earlier this week and then got a bit
slammed with other things...

I'm glad we're discussing this and not doing any of it
yet... there are some possibly big issues.

The main one that concerns me is this question: what do
permissions on entities mean? If you don't have the
permission, are allowed to do anything with the entity? If
you are not logged in, what is allowed and what isn't? Do we
allow code to circumvent the entity security by explicitly
using a non-secure delegator object (which would be the
default if we allow any sort of extension to it to be
optional)? What about cases where there are multiple
delegators involved?

Anyway, it all comes down to this: if we don't have
something in place for mandatory, always-on entity security,
then why have any at all? It would be too easy to just
circumvent the security by not having a user passed down, or
by not going through the access controlled delegator... and
it's even worse if we have to change existing to get it to
do that because then it's not just malicious code that gets
through this way, it is also any code that we (or anybody
with custom code) misses when migrating. I'd rather have a
design that eliminates or at least mitigates that risk.

About the dependency issue, I'm not too worried about it...
that's just a matter of refactoring existing code, and no
matter how we support entity-level security some refactoring
and reorganizing of code will be necessary.

Anyway, I like the ThreadLocal ExecutionContext because it
can be a lower level object used for common information, and
it can be setup to just always be there, and if there are
multiple delegator instances used by a certain code block
they will all see the same ExecutionContext. Of course, with
that approach we still have decide how the system should
behave if no user is logged in... I suppose we simply hope
that a service or something else has run that the
anonymous/non-user is allowed to access and that it has
inherited permissions for things it calls... otherwise the
non-user will probably never have permission to touch an
entity.

One thing that crossed my mind with all of this, BTW, is
that maybe we should just not worry about the entity
security for now. We can implement it for other artifacts
and worry about the entity ones later on without affecting
the other stuff...

-David


On May 16, 2009, at 1:43 PM, Adrian Crum wrote:


I spent some time researching the GenericDelegator. I
think I have come up with a solution.

First off, there are more than 2,000 references to
GenericDelegator in the project. I'm sure there are many
installations that have customizations that reference
GenericDelegator also. Changing the GenericDelegator API to
accommodate the new security design is not a good idea - it
would break a lot of code.

There is also an issue with cross-dependency. Any
attempt to put security-related code in the GenericDelegator
will fail because the security component is built after the
entity component.

If we changed GenericDelegator so that we can make
per-thread instances of it, then the class could be extended
to add the new design functionality. All existing code would
still reference GenericDelegator, but it will actually be an
extended version that is security-aware.

I spent some time separating GenericDelegator's data
out and put it in a separate class called DelegatorData.
There is only one instance of DelegatorData per delegator
name. GenericDelegator holds a reference to a DelegatorData
instance, so everything still works the same. Now we can
have more than one instance of GenericDelegator.

We could extend GenericDelegator in the entityext
component to make it security-aware. That would eliminate
any cross-dependency issues. The dispatch context, request
handler, etc would create instances of the extended
GenericDelegator.

What do you think?

-Adrian

--- On Thu, 5/14/09, David E Jones <david.jo...@hotwaxmedia.com>
wrote:

From: David E Jones <david.jo...@hotwaxmedia.com>
Subject: Re: Brainstorming: Security
Requirements/Scenarios
To: dev@ofbiz.apache.org
Date: Thursday, May 14, 2009, 7:36 PM

I don't think there is a reason why we can't.

Why do a decorator object instead of just changing
the
GenericDelegator? In order for this to do anything
we'll
have to change EVERY call to a decorator method
anyway...

-David


On May 14, 2009, at 9:08 AM, Adrian Crum wrote:

David,

In the paragraph where you talk about the
ExecutionContext (a good idea btw) you mention
thread local
variables for the entities. On another Wiki page
you said
making the Delegator security-aware would require
refactoring the Delegator.

Why can't we have a user-and-security-aware
decorator
for the Delegator?  The decorator could hold
the
thread's variables, and delegate the entity engine
calls to
the contained singleton delegator. All existing
code would
treat it like a regular delegator.

-Adrian


David E Jones wrote:
I have added these to the OFBiz Security
Refactor
page that Adrian started:
http://docs.ofbiz.org/display/OFBTECH/OFBiz+Security+Refactor
I also added a note that the
implementation
details I wrote up do not support scenario #3. I'm
not so
sure about how we're going to support that, but
I'm thinking
about it and if anyone has any ideas they would be
more than
welcome!
-David
On May 10, 2009, at 10:11 PM, David E
Jones
wrote:
I think enough time has passed, but
clearly if
anyone has any comments for configuration patterns
please
speak up!

Now to the point: I propose that we
use this
list as a set of requirements to use to evaluate
all future
proposals for security improvements, especially
related to
configuration of authorization.

Does anyone disagree with doing that?
(If so
we should discuss it more as needed, and if needed
also vote
on it)

-David


On May 6, 2009, at 1:51 PM, David E
Jones
wrote:


I think the discussion about the
"process"
versus "artifact" has resulted in consideration of
a
"process" as one way to group artifacts, so there
is no need
for separate items on this list that explicitly
handle
processes (ie they are handled implicitly). Please
let me
know if I'm misunderstanding that (especially
Andrew, you've
been a big proponent of the process side of
things).

On that note, are there any other
patterns
or specific security requirements that others
would like to
discuss? I don't think this is the sort of thing
where we
need to discuss the merits of each, unless someone
thinks
that we shouldn't bother with supporting any of
these
patterns. These should just be "socked away"
somewhere and
used while we're doing the design so we have
something to
evaluate the design alternatives to, and make sure
they
handle all of these scenarios (or that we decide
that a
non-supported scenario is not important).

-David


On May 4, 2009, at 11:28 AM, David
E Jones
wrote:


This thread is specifically
for
discussing security requirements and security use
scenarios
to drive OFBiz security functionality going
forward. Please
keep other discussion in another thread.

These things tend to fall into
two
categories: functionality access and record-level
access, or
a combination of both. That is a high level
generalization
so just warning you that what I list below may be
limited by
my own blindness since I usually think in terms of
those two
things for security configuration. In other words,
that's
the point of this brainstorming thread.

To get things started, here
are a few
I can think of and have heard from others, these
are in no
particular order:

1. User X can use Artifact Y
for
anything that artifacts supports and on any data
(where
"artifact" is a screen, web page, part of a screen
or page,
service, general logic, etc)

2. User X can use Artifact Y
only for
records determined by Constraint Z

3. User X can use any artifact
for
records determined by Constraint Z

4. Artifact Y can be used by
any user
for any purpose it supports

5. Artifact Y can be used by
any user
for only for records determined by Constraint Z

6. User X can use any artifact
for any
record (ie superuser)

Okay, you can see that my
initial pass
at this is sort of an enumeration of combinations
effort. If
you can think of other general scenarios, please
share!
Also, please feel free to share specific
requirements that
are not in such generic terms (we can worry about
putting
them in more generic terms like this later).

Thank You!
-David














Reply via email to