blob: 805894daf7b4737e1913ca36b9a6df0cb4d7eee1 [file] [log] [blame]
ExecutionContext and Security-Aware Artifacts Notes
---------------------------------------------------
2010-01-20: Security-aware artifact TODOs:
1. Add security checking at the entity field level.
Right now security checking is done only at the entity level.
2. Improve the ArtifactPath class design. Right now the
class exposes too much of its implementation, and the
ContextUtil class exploits that. Client code should not
know that the path is stored as an array.
3. Encapsulate the
Push Artifact->Run Protected Process->Pop Artifact
code into a single method.
---------------------------------------------------
2010-01-13: The main navigation is controlled by the new
security design. I created a new class - ContextUtil.java -
to hold utility methods. Those methods can be moved to
other components when the branch is merged into the trunk.
An interesting side-effect of the new security design is
its ability to expose security holes in the trunk. Log in
as admin, go to Party Manager and click on the Find button.
The exception that is thrown exposes a flaw in the
findparty.ftl file.
I added security audit capability. This was not in the
design document, but it was simple to implement and might be
useful. An artifact can be flagged as audited. Any denied
attempts to use the artifact will be logged.
---------------------------------------------------
2010-01-11: The ExecutionContext implementation is fairly complete.
The security-aware artifacts implementation is mostly complete
(the AuthorizationManager CRUD methods are not written and the
EntityListIterator is not security-aware), but its use
in the branch is still proof-of-concept. In other words, the
design is implemented and working, but very little of the project uses it.
Example: The screen renderer doesn't catch the security exceptions,
so when a user is denied access to an artifact they get the JSP error page.
---------------------------------------------------
2010-01-05: Artifact paths now support substitution ("?")
and wildcard ("*") path elements.
This solves an issue that was discussed during the design - how
to grant access to a particular artifact regardless of the
execution path. You can see examples of their use in
framework/security/data/SecurityData.xml and
framework/example/data/ExampleSecurityData.xml.
The Example component has been converted to the new
security design.
The Execution Context seems to fulfill all needs so far, and it
works pretty well, so its API could be considered stable at
this time.
---------------------------------------------------
2009-12-31: I put this text file in the branch as a means
of keeping anyone who is interested updated on the progress
of the branch.
This branch is an implementation of the Security-Aware Artifacts
design document -
http://cwiki.apache.org/confluence/display/OFBTECH/OFBiz+Security+Redesign
and it is a work in progress.
The ExecutionContext interface is
scattered across several components due to the cross-dependency
or circular-dependency issue. Cross-dependency is when Class
A references Class B, and Class B references Class A, and both
classes are in separate components. There is no way to get them
to compile. The problem is compounded in ExecutionContext because
it references 3 or 4 components.
The workaround I came up with was to have the lowest level methods
declared in the base component, then have each component extend
the interface and add their methods. It's not pretty, but it works.
This is where you can find the interfaces:
org.ofbiz.base.context.ExecutionContext
org.ofbiz.entity.ExecutionContext
org.ofbiz.service.ExecutionContext
When the cross-dependency issues are solved, all of the extended
interfaces will be consolidated into one.
The interface implementations can be found in the context component.
The ultimate goal of ExecutionContext is to have all client code
get the contained objects from ExecutionContext only - instead of
getting them from the various classes now in use. This initial
implementation focuses more on the ExecutionContext's role as
a means of tracking the execution path - which is needed for the
security-aware artifacts.
The AuthorizationManager and AccessController interfaces are based
on the java.security.* classes, and they are intended to be
implementation-agnostic. OFBiz will have an implementation based
on the entity engine, but the goal is to be able to swap out that
implementation with another.
If you want to see the ExecutionContext and AccessController in
action, change the settings in api.properties. You will see info
messages in the console log.
I added a security-aware Freemarker transform. Template
sections can be controlled with:
<@ofbizSecurity permission="view" artifactId="thisTemplate">Some text</@ofbizSecurity>
If the user has permission to view the artifact, then "Some text"
will be rendered.
The Authorization Manager is mostly working. Filtering
EntityListIterator values is not implemented due to architectural
problems.