I think you want:

from gluon.fileutils import check_credentials
if not *check_credentials(request):*
*       if not session.org: redirect('some_error_page')
*   db.auth_group._common_filter=lambda query: (db.auth_group.org==
session.org)



On Tuesday, 21 August 2012 01:04:38 UTC-5, mweissen wrote:
>
> This is the new code:
>
> from gluon.fileutils import check_credentials
> db.auth_group._common_filter=lambda query: \   
>   (db.auth_group.org==session.org) *or check_credentials(request)*
>
> I have tested check_credentials(request): it returns True - good! 
> But - sorry! -  it did not solve the problem:
>
>    - Let's say I have 100 auth_group rows with org==1 and 100 auth_group 
>    rows with org==2
>    - The admin application tells me "100 selected", but I can *see all 200
>    * rows. 
>    - I have tried to change one record. I can open this row, change any 
>    field and submit it.
>    - I get the flash "*Done*" But nothing has happened - the old values 
>    are in the table.
>
> About the message "value not in database": my fault - a wrong 
> db.auth_group.org.requires 
> somewhere in the model.
>
> 2012/8/21 Massimo Di Pierro <massimo....@gmail.com <javascript:>>
>
>> Apologies 
>>
>> check_credentials(request)
>>
>> instead of
>>
>> check_credentials('admin')
>>
>>
>> On Monday, 20 August 2012 14:33:55 UTC-5, mweissen wrote:
>>
>>> A little bit more code:
>>>
>>> db.define_table('org',
>>>     Field('orgnr',
>>>     Field(shortname',
>>>         length=20, 
>>>         requires=IS_LENGTH(maxsize=20,**minsize=3)),
>>>     ...
>>>     )
>>>
>>>
>>> auth.settings.extra_fields['**auth_group']=[
>>>     Field('org','reference org',
>>>         default=lambda: session.org,
>>>         requires=IS_IN_DB(db, 'org.id', '%(shortname)s',
>>>           error_message=T('Not allowed')), 
>>>       ),...
>>>
>>> from gluon.fileutils import check_credentials
>>>
>>> db.auth_group._common_filter=**lambda query:
>>>   (db.auth_group.org==session.**org <http://session.org>) or 
>>> check_credentials('admin')
>>>
>>>
>>>
>>> Now I am using the admin interface and I try to change one row of 
>>> auth_group. The same result as before (without 
>>> check_credentials('admin'))
>>>
>>>    - The value of auth_group.org==1.
>>>    - The error messae is "value not in database"
>>>    - And, of course, there is a record in db.org with db.org.id==1
>>>    
>>> To learn more about check_credentials I added:
>>>
>>> if check_credentials('admin'): print 'Admin'
>>>
>>> Only for the test. 
>>>
>>> And I get a new error message:
>>>
>>> 127.0.0.1.2012-08-20.21-05-04.**43dc8360-a22d-408d-8889-**00fe62ef4a38
>>> <type 'exceptions.AttributeError'> 'str' object has no attribute 'env' 
>>> Version  web2py™ (2, 0, 0, datetime.datetime(2012, 8, 9, 8, 57, 54), 
>>> 'dev')  Python Python 2.7.2: D:\Python27\python.exe  Traceback 
>>>
>>> 1.
>>> 2.
>>> 3.
>>> 4.
>>> 5.
>>> 6.
>>> 7.
>>> 8.
>>> 9.
>>>
>>> Traceback (most recent call last):
>>>   File "D:\...\web2py\gluon\**restricted.py", line 205, in restricted
>>>
>>>
>>>
>>>
>>>
>>>     exec ccode in environment
>>>   File "D:/.../web2py/applications/**secure/models/db.py" 
>>> <http://127.0.0.1:8000/admin/default/edit/secure/models/db.py>, line 389, 
>>> in <module>
>>>
>>>
>>>
>>>
>>>
>>>     if check_credentials('admin'): print 'Admin'
>>>
>>>
>>>
>>>
>>>
>>>   File "D:\...\web2py\gluon\**fileutils.py", line 328, in check_credentials
>>>
>>>
>>>
>>>
>>>
>>>     if request.env.web2py_runtime_gae**:
>>>
>>>
>>>
>>>
>>> AttributeError: 'str' object has no attribute 'env'
>>>
>>>
>>>
>>> 2012/8/20 Massimo Di Pierro <massimo....@gmail.com>
>>>
>>> You can do:
>>>>
>>>> db.define_table(...., common_filter = None if not session.org else 
>>>> (lambda query:(db.my_table.org==sessio**n.org <http://session.org/>)))
>>>>
>>>> you can also use the check:
>>>>
>>>> from gluon.fileutils import check_credentials
>>>> check_credentials('admin') #returns true if you are logged as admin.
>>>>
>>>>
>>>> On Monday, 20 August 2012 12:48:29 UTC-5, mweissen wrote:
>>>>
>>>>> (1) session.org will be set with the login. But I am an 
>>>>> administrator:  I think I should use the admin application without a 
>>>>> login 
>>>>> to the application itself.
>>>>>
>>>>> (2) Lets say session.org==1: now it is not possible to change a 
>>>>> record with my_table.org==2 using the admin app.
>>>>>
>>>>> (3) Did you mean:
>>>>>
>>>>> common_filter = lambda query:
>>>>>   (db.my_table.org==session.org)**** if session.org else True
>>>>>
>>>>>
>>>>> Interesting idea!
>>>>>
>>>>> 2012/8/20 Massimo Di Pierro <massimo....@gmail.com>
>>>>>
>>>>> How do you set the common filter? Seems to me if session.org is not 
>>>>>> set, the common filter should not be set. web2py cannot ignore it 
>>>>>> because 
>>>>>> it does the wrong thing.
>>>>>>
>>>>>>
>>>>>> On Monday, 20 August 2012 11:41:41 UTC-5, mweissen wrote:
>>>>>>>
>>>>>>> I have an application which should be used by some organizations. 
>>>>>>> Therefore I have added 
>>>>>>>
>>>>>>> Field('org','reference org', default=lambda:session.org), 
>>>>>>>
>>>>>>> and 
>>>>>>>
>>>>>>> common_filter = lambda query: db.my_table.org==session.org
>>>>>>>
>>>>>>> to my_table. session.org contails the id of the respective 
>>>>>>> organization.
>>>>>>> Great feature,works fine! But using the database administration of 
>>>>>>> the admin-application the common filter is still active.
>>>>>>> There is an "ignore_rw=True" in the admin application and I think I 
>>>>>>> have read somewhere that there is also an "
>>>>>>> ignore_common_filters=True".
>>>>>>>
>>>>>>> If session.org is not set, a "database db select" shows strange 
>>>>>>> effects:
>>>>>>>
>>>>>>>    - I can see the first 100 rows.
>>>>>>>    - But the message is "0 selected" 
>>>>>>>    - It is not possible to Update a record 
>>>>>>>
>>>>>>>
>>>>>>> A simple "ignore_common_filters=True" at the appropriate location 
>>>>>>> should solve the problem. I have taken a quick look at the code, but I 
>>>>>>> think this statement has to be "very inside", therefore I have no 
>>>>>>> concrete 
>>>>>>> proposal.
>>>>>>>
>>>>>>> Regards, Martin
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>  -- 
>>>>>>
>>>>>   -- 
>>>>  
>>>>  
>>>>
>>>  -- 
>>  
>>  
>>
>

-- 



Reply via email to