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) 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 <[email protected]>

> You can do:
>
> db.define_table(...., common_filter = None if not session.org else
> (lambda query:(db.my_table.org==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 <[email protected]>
>>
>> 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