I understand. But that wouldn't explain things like

<html-template location="component://learning/webapp/
learning/entityaccess/displaydataretrieved.ftl"/>

or

<include-form name="ScriptNameForm" location="component://learning/widget/
learning/LearningForms.xml"/>

or

<script location="component://learning/webapp/learning/
WEB-INF/actions/entityaccess/processEntityAccessBSF.bsh"/>

or

<xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/
simple-methods.xsd">

Anyways, as I said, not a problem for me. I just thought I'd let you guys
know in case you wanted to pursue it or not.

I am onto Chapter 12 now. Thanks for helping me over the hump!

On 22 June 2015 at 13:03, Jacques Le Roux <[email protected]>
wrote:

> Le 21/06/2015 17:26, Brad Smith a écrit :
>
>> OK, thanks Jacques. I will continue on with examples I can do.
>>
>> The Safari version doesn't have page numbers because each chapter has it's
>> own entire page, but the example I gave was in Chapter 8, under section
>> "The Generic Screen". But as I said, it's just one example. On the Safari
>> version it crops up in almost every example where there's a URI or URL, so
>> maybe there's an issue with the conversion from original format to Safari
>> format. Anyway, just thought I'd raise it.
>>
>
> It seems that when Packt published the book they (could be an author's
> decision) decided to put an empty space after a parameter when used in an
> URL like in
>     {OFBizInstallFolder} \runtime\logs
> But plain URLs have not this.
>
> Jacques
>
>
>
>> On 21 June 2015 at 16:58, Jacques Le Roux <[email protected]>
>> wrote:
>>
>>  Le 20/06/2015 12:04, Brad Smith a écrit :
>>>
>>>  Gentlemen,
>>>>
>>>> Good news. I made the recommended underscore change and both the
>>>>
>>>> <check-permission permission="LEARN" action="_VIEW"/> and
>>>> <check-permission
>>>> permission="LEARN" action="_ADMIN"/>
>>>>
>>>> examples worked. Thanks for that!
>>>>
>>>> However, in the next example under the Role Checks section, I hit a new
>>>> problem.
>>>>
>>>> I changed my service definition to look like
>>>>
>>>>       <service name="learningCallingServiceOneWithPermission"
>>>> engine="java"
>>>> location="org.ofbiz.learning.learning.LearningServices"
>>>> invoke="callingServiceOne">
>>>>           <description>First Service Called From The
>>>> Controller</description>
>>>>           <required-permissions join-type="OR">
>>>>               <check-role-member role-type="CUSTOMER"/>
>>>>           </required-permissions>
>>>>           <implements service="learningInterface"/>
>>>>       </service>
>>>>
>>>> In ModelPermission.java I also commented out
>>>>
>>>>       partyRoles = EntityUtil.filterByDate(partyRoles);
>>>>
>>>> which is now on line 109, and rebuilt.
>>>>
>>>> I tried with line 109 both commented and uncommented, but in neither
>>>> case
>>>> was either 'allowed' or 'denied' able to invoke the service.
>>>>
>>>> Any suggestions?
>>>>
>>>>  Forget about check-role-member, it's deprecated, see
>>> http://ofbiz.apache.org/dtds/services.xsd
>>>
>>>   Regarding the bug bush, we are currently reviewing a couple of
>>> different
>>>
>>>> frameworks, so if we decide to go with OFBiz, I'll let you know.
>>>>
>>>> PS. I should point out that I am reading the online version of the book
>>>> at
>>>> Safari Books. I'm not sure how the books get on there so maybe the
>>>> underscore was some sort of OCR error?
>>>>
>>>>  No, it's indeed in the printed version I have
>>>
>>>
>>>   PPS. Also, I've found that whenever there's a URL or URI somewhere in
>>>
>>>> example code, it adds a whitespace character in the middle of it, e.g.
>>>> below:
>>>>
>>>> <screen name="ProcessEntityAccessBSF">
>>>>       <section>
>>>>           <actions>
>>>>               <script location="component://learning/webapp/learning/
>>>> WEB-INF/actions/entityaccess/processEntityAccessBSF.bsh"/>
>>>>           </actions>
>>>>           <widgets>
>>>>               <decorator-screen name="main-decorator"
>>>> location="${parameters.mainDecoratorLocation}">
>>>>                   <decorator-section name="title">
>>>>                       <label text="Generic Screen for Displaying Data
>>>> Retrieved"/>
>>>>                   </decorator-section>
>>>>                   <decorator-section name="body">
>>>>                       <include-form name="ScriptNameForm"
>>>> location="component://learning/widget/ learning/LearningForms.xml"/>
>>>>                       <section>
>>>>                           <condition><not> <if-empty
>>>> field-name="parameters.scriptName"/> </not></condition>
>>>>                           <widgets>
>>>>                               <platform-specific><html>
>>>>                                   <html-template
>>>> location="component://learning/webapp/
>>>> learning/entityaccess/displaydataretrieved.ftl"/>
>>>>                               </html></platform-specific>
>>>>                           </widgets>
>>>>                       </section>
>>>>                   </decorator-section>
>>>>               </decorator-screen>
>>>>           </widgets>
>>>>       </section>
>>>> </screen>
>>>>
>>>> I haven't worked out the pattern of when it appears, and it wasn't a
>>>> major
>>>> issue. Just mildly annoying, but it could cause confusion for novice
>>>> users.
>>>>
>>>>  If you give me the page number I could check it's also in the book
>>>
>>> Jacques
>>>
>>>
>>>
>>>
>>>  On 18 June 2015 at 14:12, Jacques Le Roux <[email protected]
>>>> >
>>>> wrote:
>>>>
>>>>  Guys like you are welcome, we could even have a bug bash sometimes
>>>>>
>>>>>  https://en.wikipedia.org/wiki/Bug_bash
>>>>
>>>>  Jacques
>>>>>
>>>>>
>>>>> Le 18/06/2015 12:57, Brad Smith a écrit :
>>>>>
>>>>>  Merci!
>>>>>>
>>>>>> I will have a bash at it again when I get home tonight. Don't be too
>>>>>> hard
>>>>>> on yourself. I am notorious for being thorough and annoying because of
>>>>>>
>>>>>>  it.
>>>>> :) I am sure I pay for my sins in other ways... :p
>>>>>
>>>>>> Will let you know how I get on.
>>>>>>
>>>>>> On 18 June 2015 at 05:42, Jacques Le Roux <
>>>>>> [email protected]
>>>>>> wrote:
>>>>>>
>>>>>>   Le 16/06/2015 13:49, Brad Smith a écrit :
>>>>>>
>>>>>>>   My bad, the question should rather be, is two-part permissions
>>>>>>>
>>>>>>>> approach
>>>>>>>> deprecated?
>>>>>>>>
>>>>>>>>   Actually no, it's still usable, look for "check-permission" at
>>>>>>>>
>>>>>>>
>>>>>>>
>>>> https://cwiki.apache.org/confluence/display/OFBADMIN/Mini+Language+-+minilang+-+simple-method+-+Reference
>>>>
>>>>  Note that to effectively work it needs to be followed by a
>>>>>
>>>>>> <check-permission> as explained here
>>>>>>> http://markmail.org/message/dnlrev5pnj7brhfm
>>>>>>>
>>>>>>> As a reviewer of this book, I'm embarrassed to say it, but after 8
>>>>>>> years
>>>>>>> you clearly found a typo, the underscore is missing. As looking for
>>>>>>> examples in OFBiz shows, it should be
>>>>>>>        <check-permission permission="LEARN" action="_VIEW"/>
>>>>>>>
>>>>>>> If you are interested in more details about OFBiz Security
>>>>>>> Permissions
>>>>>>>
>>>>>>>  the
>>>>>>
>>>>> reference so far is
>>>>>
>>>>>>
>>>>>>>
>>>> https://cwiki.apache.org/confluence/display/OFBIZ/OFBiz+Security+Permissions
>>>>
>>>>  that I completely rewrote last year.
>>>>>
>>>>>> Jacques
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>   On 16 June 2015 at 13:43, Brad Smith <[email protected]> wrote:
>>>>>>>
>>>>>>>>     Hi all,
>>>>>>>>
>>>>>>>>  I am currently running through Apache OFBiz Development: The
>>>>>>>>>
>>>>>>>>>  Beginner's
>>>>>>>>
>>>>>>> Tutorial by Howell and Wong.
>>>>>
>>>>>> I have my dev environment setup in IntelliJ and so far the examples
>>>>>>>>>
>>>>>>>>>  have
>>>>>>>>
>>>>>>> all more-or-less worked. I am up to Chapter 11, Permissions and the
>>>>>
>>>>>> Service
>>>>>>>>> Engine and have hit some issues.
>>>>>>>>>
>>>>>>>>> The example setup in the "learning" component is as follows:
>>>>>>>>>
>>>>>>>>> ${component:learning}\servicedef\services.xml
>>>>>>>>> ---------------------------------------------
>>>>>>>>>
>>>>>>>>> <service name="learningCallingServiceOneWithPermission"
>>>>>>>>> engine="java"
>>>>>>>>> location="org.ofbiz.learning.learning.LearningServices"
>>>>>>>>> invoke="callingServiceOne">
>>>>>>>>> <description>First Service Called From The Controller</description>
>>>>>>>>> <required-permissions join-type="OR">
>>>>>>>>> <check-permission permission="LEARN_VIEW"/>
>>>>>>>>> </required-permissions>
>>>>>>>>> <implements service="learningInterface"/>
>>>>>>>>> </service>
>>>>>>>>>
>>>>>>>>> ${webapp:learning}\WEB-INF\controller.xml
>>>>>>>>> -----------------------------------------
>>>>>>>>>
>>>>>>>>> <request-map uri="TestPermissions">
>>>>>>>>> <security auth="true" https="true"/>
>>>>>>>>> <response name="success" type="view"
>>>>>>>>> value="TestCallingServicesWithPermission"/>
>>>>>>>>> <response name="error" type="view" value="login"/>
>>>>>>>>> </request-map>
>>>>>>>>> <request-map uri="TestCallingServicesWithPermission">
>>>>>>>>> <security auth="true" https="true"/>
>>>>>>>>> <event type="service"
>>>>>>>>>
>>>>>>>>>  invoke="learningCallingServiceOneWithPermission"/>
>>>>>>>>
>>>>>>> <response name="success" type="view"
>>>>>
>>>>>> value="TestCallingServicesWithPermission"/>
>>>>>>>>> <response name="error" type="view"
>>>>>>>>> value="TestCallingServicesWithPermission"/>
>>>>>>>>> </request-map>
>>>>>>>>>
>>>>>>>>> and
>>>>>>>>>
>>>>>>>>> <view-map name="TestCallingServicesWithPermission" type="screen"
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>> page="component://learning/widget/learning/LearningScreens.xml#TestCallingServicesWithPermission"/>
>>>>
>>>>  ${component:learning}\widget\learning\LearningScreens.xml
>>>>>
>>>>>> ---------------------------------------------------------
>>>>>>>>>
>>>>>>>>> <screen name="TestFirstService">
>>>>>>>>>         <section>
>>>>>>>>>             <widgets>
>>>>>>>>>                 <section>
>>>>>>>>>                     <condition><if-empty
>>>>>>>>> field-name="formTarget"/></condition>
>>>>>>>>>                     <actions>
>>>>>>>>>                         <set field="formTarget"
>>>>>>>>>
>>>>>>>>>  value="TestFirstService"/>
>>>>>>>>
>>>>>>>                         <set field="title" value="Testing Our First
>>>>>
>>>>>> Service"/>
>>>>>>>>>                     </actions>
>>>>>>>>>                     <widgets/>
>>>>>>>>>                 </section>
>>>>>>>>>                 <decorator-screen name="main-decorator"
>>>>>>>>> location="${parameters.mainDecoratorLocation}">
>>>>>>>>>                     <decorator-section name="body">
>>>>>>>>>                         <include-form name="TestingServices"
>>>>>>>>> location="component://learning/widget/learning/LearningForms.xml"/>
>>>>>>>>>                         <label text="Full Name:
>>>>>>>>>
>>>>>>>>>  ${parameters.fullName}"/>
>>>>>>>>
>>>>>>>                     </decorator-section>
>>>>>
>>>>>>                 </decorator-screen>
>>>>>>>>>             </widgets>
>>>>>>>>>         </section>
>>>>>>>>> </screen>
>>>>>>>>> ...
>>>>>>>>> <screen name="TestCallingServicesWithPermission">
>>>>>>>>>         <section>
>>>>>>>>>             <actions><set field="formTarget"
>>>>>>>>> value="TestCallingServicesWithPermission"/>
>>>>>>>>>             </actions>
>>>>>>>>>             <widgets>
>>>>>>>>>                 <include-screen name="TestFirstService"/>
>>>>>>>>>             </widgets>
>>>>>>>>>         </section>
>>>>>>>>> </screen>
>>>>>>>>>
>>>>>>>>> ${component:learning}\widget\learning\LearningForms.xml
>>>>>>>>> -------------------------------------------------------
>>>>>>>>>
>>>>>>>>> <form name="TestingServices" type="single" target="${formTarget}">
>>>>>>>>>         <field name="firstName"><text/></field>
>>>>>>>>>         <field name="lastName"><text/></field>
>>>>>>>>>         <field name="planetId"><text/></field>
>>>>>>>>>         <field name="submit"><submit/></field>
>>>>>>>>> </form>
>>>>>>>>>
>>>>>>>>> With regards to permissions, I have them set up as follows as per
>>>>>>>>>
>>>>>>>>>  Chapter
>>>>>>>>
>>>>>>> 9:
>>>>>
>>>>>> User            Security Group        SecurityPermission
>>>>>>>>> User/Security Group From Date          User/Security Group Thru
>>>>>>>>> Date
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>> -------------------------------------------------------------------------------------------------------------------------------------
>>>>
>>>>  allowed         LEARNSCREENS          LEARN_VIEW
>>>>>
>>>>>> 2015-06-15 19:34:15.832                NULL
>>>>>>>>> denied          LEARNSCREENS          LEARN_VIEW
>>>>>>>>> 2015-06-13 18:57:44.724                2015-06-13 18:57:44.724
>>>>>>>>>       "             LEARNSCREENS          LEARN_VIEW
>>>>>>>>> 2015-06-13 18:57:44.000                2015-06-13 19:33:47.000
>>>>>>>>>
>>>>>>>>> Under the above configuration, the permissions checks work as
>>>>>>>>>
>>>>>>>>>  advertised,
>>>>>>>>
>>>>>>> and "allowed" is able to call the service while "denied" is not.
>>>>>
>>>>>> The next section of the chapter talks about two-part permissions, and
>>>>>>>>> makes the following changes to the configuration. Apparently, OFBiz
>>>>>>>>> is
>>>>>>>>> supposed to interpret the underscore in permission attribute as
>>>>>>>>> some
>>>>>>>>>
>>>>>>>>>  sort
>>>>>>>>
>>>>>>> of tokenising character, where the first token "LEARN" becomes the
>>>>>
>>>>>> permission, and the second part "VIEW" becomes an action. This seems
>>>>>>>>> "loose" to me but nevertheless.
>>>>>>>>>
>>>>>>>>> ${component:learning}\servicedef\services.xml
>>>>>>>>> ---------------------------------------------
>>>>>>>>>
>>>>>>>>> <check-permission permission="LEARN_VIEW"/>
>>>>>>>>>
>>>>>>>>> becomes
>>>>>>>>>
>>>>>>>>> <check-permission permission="LEARN" action="VIEW"/>
>>>>>>>>>
>>>>>>>>> According to the text, the authorisation behaviour should remain
>>>>>>>>>
>>>>>>>>>  exactly
>>>>>>>>
>>>>>>> the same. In other words, the check-permission elements are
>>>>>
>>>>>> equivalent.
>>>>>>>>
>>>>>>> But
>>>>>
>>>>>> this is not the case. Under the modified configuration, neither
>>>>>>>>>
>>>>>>>>>  "allowed"
>>>>>>>>
>>>>>>> nor "denied" are able to call the service. I also don't see a "LEARN"
>>>>>
>>>>>> item
>>>>>>>>> in the SecurityPermission entity anywhere, so I don't see how this
>>>>>>>>>
>>>>>>>>>  should
>>>>>>>>
>>>>>>> work in the first place.
>>>>>
>>>>>> Is this tokenised approach deprecated? Or is there something else
>>>>>>>>>
>>>>>>>>>  going
>>>>>>>>
>>>>>>> on?
>>>>>
>>>>>>
>>>>>>>>>
>>>>>>>>>

Reply via email to