To expand on that a bit, which fields are editable for each permission level is 
defined in the code of a superclass for each area, so not quite that flexible, 
but good enough for what we are doing.

> On Aug 13, 2017, at 6:11 PM, Morris, Mark <mark.mor...@experian.com> wrote:
> 
> No, it’s really just something bolted on top of a permission system on a 
> suite of applications that have been in continuous development for almost 20 
> years. In other words, not an ideal architecture at this point, but I think 
> impressive that it’s holding its own!
> 
>> On Aug 13, 2017, at 6:02 PM, Paul Yu <p...@mac.com> wrote:
>> 
>> Is this an ABAC implementation?
>> 
>> Paul
>> 
>> Sent from my iPhone
>> Please excuse iOS autocomplete 
>> 
>>> On Aug 13, 2017, at 5:08 PM, Morris, Mark <mark.mor...@experian.com> wrote:
>>> 
>>> This is a topic that was discussed back in 2011, but my searches haven’t 
>>> turned up a satisfactory solution.
>>> 
>>> Some quick background info, we have information-dense, complex pages, and 
>>> there are a variety of permission levels for internal and external users 
>>> that needed to be implemented at field-level granularity.
>>> 
>>> My approach was to create a method for determining edit-ability in the 
>>> superclass for each area’s components that maps permission level with field 
>>> name:
>>> 
>>>  public boolean editingEnabledByField( String field )
>>> 
>>> … which I’m calling using WOOgnl in WOConditionals as the condition and in 
>>> custom components like this:
>>> 
>>> <wo:OurCustomComponent 
>>> editingEnabled="~editingEnabledByField(\”thisFieldName\")" expanded="$true" 
>>> />
>>> 
>>> This actually works fine as far as the functionality goes. The issue is our 
>>> logs get filled with warnings that look like error messages, one for every 
>>> field for every page hit. Since the bindings on these pages are 
>>> synchronized, the log messages apparently occur when the value of 
>>> “editingEnabled” tries to get pushed into 
>>> “editingEnabledByField(”thisFieldName”)”, which obviously isn’t possible. 
>>> (So getting the value from the ognl expression works fine, setting to the 
>>> ognl expression does not.)
>>> 
>>> In 2011 Mike Schrag wrote about almost this exact same question:
>>> 
>>>> this seems wrong to me ... it's not the ognl is intrinsically unsettable 
>>>> it's that you're trying to set a value on an ognl expression that 
>>>> definitely ISN'T settable. either you should turn off automatic binding 
>>>> synchronization on SelectByCharacterPopupEditField and manually sync, or 
>>>> this patch should maybe be smarter about how it determines "setability" in 
>>>> ognl. i would be afraid of breaking anyone who might be taking advantage 
>>>> of settable ognl expressions. i don't, offhand, know how to perform that 
>>>> check -- whether ognl has API to do it or if it's even possible.
>>> 
>>> The patch he was referring to was:
>>> 
>>>   public WOOgnlAssociation(String s) {
>>>       super(s);
>>>       _isValueSettable = false;
>>>   }
>>> 
>>> … which is a sledgehammer approach that probably wouldn’t be applicable in 
>>> general. However, picking up from where Stefan left off there, perhaps this 
>>> is at least a partial solution (that I think will work for my case anyway):
>>> 
>>>  public WOOgnlAssociation(String s) {
>>>      super(s);
>>>      if( s != null && s.matches( ".+\\(.*\\S.*\\)" ) ) {
>>>          _isValueSettable = false;
>>>      }
>>>  }
>>> 
>>> This regex checks to see if there’s a method call with some sort of 
>>> parameter (by looking for something followed by “(“ followed by some 
>>> non-whitespace followed by “)”).
>>> 
>>> Does this seem reasonable? Any counterexamples where a matching key path 
>>> should be settable? I know that ognl expressions can include parentheses as 
>>> well, but I would think those also would not be settable, right?
>>> 
>>> Thanks for any tips or advice!
>>> 
>>> Regards,
>>> Mark
>>> _______________________________________________
>>> Do not post admin requests to the list. They will be ignored.
>>> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
>>> Help/Unsubscribe/Update your Subscription:
>>> https://lists.apple.com/mailman/options/webobjects-dev/pyu%40mac.com
>>> 
>>> This email sent to p...@mac.com
> 
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/webobjects-dev/mark.morris%40experian.com
> 
> This email sent to mark.mor...@experian.com

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to