[web2py] Re: Auth question

2018-10-30 Thread fjbernal2020
Hi,

I think the easier way is here 
http://web2py.com/books/default/chapter/29/09/access-control

 

> ## after auth = Auth(db)
>
>  
>
db.define_table('workspaces',
>
> Field('workspace', 'string', requires=IS_NOT_EMPTY()))
>
 
>
auth.settings.extra_fields['auth_user']= [
>   Field('workspace', 'reference workspaces', label=T('workspace')]
>
>  
>
db.auth_user.workspace.requires = IS_IN_DB(db, db.workspaces.id, 
'%(workspace)s')
>
>  
I din't try, but I would :)

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [web2py] Re: Auth question

2018-10-29 Thread Rahul
Hi Jim,
 This works like a charm. Thank you for this. It is what I expected 
and wanted to achieve with Auth. I'll check my new project for what I may 
be doing wrong, for now it seems that the scaffolding admin interface I 
want to use for my app is the one that is the culprit. It has lots of 
custom js and css files. I would need to figure out a way to merge them 
with it properly.  Again, Thank you! for your patience and wonderful 
support. And thank you everyone. 

Regards,

Rahul. 

On Sunday, October 28, 2018 at 6:33:25 AM UTC+5:30, Jim S wrote:
>
> Rahul
>
> Let's try this a different way.
>
> Attached is a simple multi-tenant app with one table.
>
> Does this do what you need?
>
> 1.  Create a new project in web2py
> 2.  Replace db.py in your models dir with this one
> 3.  Replace default.py in your controllers dir with this one
> 4.  Replace index.html in views/default with this one
> 5.  Add notes.html to views/default
> 6.  Replace storage.sqlite in your databases dir with this one
>
> Depending on your version of web2py this should all work.
>
> I've created 2 logins
>
> elvis - password is password
> blueeyes - password is password
>
> Click on the notes link logged in as each of them and you'll see different 
> notes show up based on the common filter.
>
> -Jim
>
> On Sat, Oct 27, 2018 at 12:52 PM Rahul > 
> wrote:
>
>> Hi Dave and Jim,
>>Please find the files in the zipped archive. I have added 
>> default.py, db.py, index.html and also layout file which I am converting to 
>> use with web2py. called ace.html. I have also attached the views\login.html 
>> file since I am extending this file  specifically for login form as it is 
>> different than layout file. Let me know. Thanks!
>>
>>
>> Regards,
>>
>> Rahul 
>>
>> On Friday, October 26, 2018 at 5:11:12 PM UTC+5:30, Jim S wrote:
>>>
>>> Can you show the entire db.py, default py and index.html?
>>>
>>> Jim
>>>
>>>
>>> On Fri, Oct 26, 2018, 1:44 AM Rahul  wrote:
>>>
 Nope - doesnt help. I commented out all the user functions defined in 
 the controller and 


 #  User functions ---
 '''def login(): return dict(form=auth.login())
 def register(): return dict(form=auth.register())
 def retrieve_password(): return dict(form=auth.reset_password())
 def logout(): return dict(form=auth.logout())
 def profile(): return dict(form=auth.profile())
 '''

 I even decorated index - It does take me to the login screen but from 
 there nothing happens. It just wont log me in like it did before. Also,  I 
 have two users in database but none work now.  Again, register seems to 
 fail (It did work earlier) but now it doesnt. See screenshot of both 
 screens. Looks like I must be really doing something weird. If this wont 
 work by this Sunday. I may go back to my old style of coding and do it all 
 by myself. I've seriously lost 10 days reading and experimenting with Auth 
 to make it work . Not too much coded. 

 @auth.requires_login()
 def index():
 response.flash = T("Hello User")
 #redirect(URL(r=request, c='default/user', f='login')) # Redirects 
 user to login page
 return dict(message=T('Welcome to web2py!'))



 Thanks,

 Rahul



 On Thursday, October 25, 2018 at 6:02:45 PM UTC+5:30, Jim S wrote:
>
> Having the default user() functions is all you need.  I'd try 
> commenting out your 'user' functions.
>
> -Jim
>
> On Wednesday, October 24, 2018 at 10:59:45 PM UTC-5, Rahul wrote:
>>
>> Yes this is in default.py. Please excuse me for my bad code as I am 
>> still experimenting with Auth and not totally familiar with the 
>> implementation. Is this the right way that I am doing it? or only having 
>> user() function is enough ? 
>>
>> Thanks, Rahul
>>
>> On Wednesday, October 24, 2018 at 9:45:21 PM UTC+5:30, Jim S wrote:
>>>
>>> I'm confused.  Is this code in your controller somewhere?
>>>
>>> #  User functions ---
>>> def login(): return dict(form=auth.login())
>>> def register(): return dict(form=auth.register())
>>> def retrieve_password(): return dict(form=auth.reset_password())
>>> def logout(): return dict(form=auth.logout())
>>> def profile(): return dict(form=auth.profile())
>>>
>>> You shouldn't need it.  To override the default login stuff I've 
>>> just modified the one in default.py.
>>>
>>> -Jim
>>>
>>>
>>>
>>> On Tuesday, October 23, 2018 at 11:26:45 PM UTC-5, Rahul wrote:

 The user function remains as-is - No modifications done. 

 def user():
 """
 exposes:
 http:///[app]/default/user/login
 http:///[app]/default/user/logout
 http:///[app]/default/user/register
 http:///[app]/default/user/profile

Re: [web2py] Re: Auth question

2018-10-27 Thread Jim Steil
Rahul

Let's try this a different way.

Attached is a simple multi-tenant app with one table.

Does this do what you need?

1.  Create a new project in web2py
2.  Replace db.py in your models dir with this one
3.  Replace default.py in your controllers dir with this one
4.  Replace index.html in views/default with this one
5.  Add notes.html to views/default
6.  Replace storage.sqlite in your databases dir with this one

Depending on your version of web2py this should all work.

I've created 2 logins

elvis - password is password
blueeyes - password is password

Click on the notes link logged in as each of them and you'll see different
notes show up based on the common filter.

-Jim

On Sat, Oct 27, 2018 at 12:52 PM Rahul  wrote:

> Hi Dave and Jim,
>Please find the files in the zipped archive. I have added
> default.py, db.py, index.html and also layout file which I am converting to
> use with web2py. called ace.html. I have also attached the views\login.html
> file since I am extending this file  specifically for login form as it is
> different than layout file. Let me know. Thanks!
>
>
> Regards,
>
> Rahul
>
> On Friday, October 26, 2018 at 5:11:12 PM UTC+5:30, Jim S wrote:
>>
>> Can you show the entire db.py, default py and index.html?
>>
>> Jim
>>
>>
>> On Fri, Oct 26, 2018, 1:44 AM Rahul  wrote:
>>
>>> Nope - doesnt help. I commented out all the user functions defined in
>>> the controller and
>>>
>>>
>>> #  User functions ---
>>> '''def login(): return dict(form=auth.login())
>>> def register(): return dict(form=auth.register())
>>> def retrieve_password(): return dict(form=auth.reset_password())
>>> def logout(): return dict(form=auth.logout())
>>> def profile(): return dict(form=auth.profile())
>>> '''
>>>
>>> I even decorated index - It does take me to the login screen but from
>>> there nothing happens. It just wont log me in like it did before. Also,  I
>>> have two users in database but none work now.  Again, register seems to
>>> fail (It did work earlier) but now it doesnt. See screenshot of both
>>> screens. Looks like I must be really doing something weird. If this wont
>>> work by this Sunday. I may go back to my old style of coding and do it all
>>> by myself. I've seriously lost 10 days reading and experimenting with Auth
>>> to make it work . Not too much coded.
>>>
>>> @auth.requires_login()
>>> def index():
>>> response.flash = T("Hello User")
>>> #redirect(URL(r=request, c='default/user', f='login')) # Redirects
>>> user to login page
>>> return dict(message=T('Welcome to web2py!'))
>>>
>>>
>>>
>>> Thanks,
>>>
>>> Rahul
>>>
>>>
>>>
>>> On Thursday, October 25, 2018 at 6:02:45 PM UTC+5:30, Jim S wrote:

 Having the default user() functions is all you need.  I'd try
 commenting out your 'user' functions.

 -Jim

 On Wednesday, October 24, 2018 at 10:59:45 PM UTC-5, Rahul wrote:
>
> Yes this is in default.py. Please excuse me for my bad code as I am
> still experimenting with Auth and not totally familiar with the
> implementation. Is this the right way that I am doing it? or only having
> user() function is enough ?
>
> Thanks, Rahul
>
> On Wednesday, October 24, 2018 at 9:45:21 PM UTC+5:30, Jim S wrote:
>>
>> I'm confused.  Is this code in your controller somewhere?
>>
>> #  User functions ---
>> def login(): return dict(form=auth.login())
>> def register(): return dict(form=auth.register())
>> def retrieve_password(): return dict(form=auth.reset_password())
>> def logout(): return dict(form=auth.logout())
>> def profile(): return dict(form=auth.profile())
>>
>> You shouldn't need it.  To override the default login stuff I've just
>> modified the one in default.py.
>>
>> -Jim
>>
>>
>>
>> On Tuesday, October 23, 2018 at 11:26:45 PM UTC-5, Rahul wrote:
>>>
>>> The user function remains as-is - No modifications done.
>>>
>>> def user():
>>> """
>>> exposes:
>>> http:///[app]/default/user/login
>>> http:///[app]/default/user/logout
>>> http:///[app]/default/user/register
>>> http:///[app]/default/user/profile
>>> http:///[app]/default/user/retrieve_password
>>> http:///[app]/default/user/change_password
>>> http:///[app]/default/user/bulk_register
>>> use @auth.requires_login()
>>> @auth.requires_membership('group name')
>>> @auth.requires_permission('read','table name',record_id)
>>> to decorate functions that need access control
>>> also notice there is http:///[app]/appadmin/manage/auth to
>>> allow administrator to manage users
>>> """
>>> return dict(form=auth())
>>>
>>> I am using the specified functions to expose methods as below -
>>> #  User functions ---
>>> def login(): return dict(form=auth.login())

Re: [web2py] Re: Auth question

2018-10-27 Thread Rahul
Hi Dave and Jim,
   Please find the files in the zipped archive. I have added 
default.py, db.py, index.html and also layout file which I am converting to 
use with web2py. called ace.html. I have also attached the views\login.html 
file since I am extending this file  specifically for login form as it is 
different than layout file. Let me know. Thanks!


Regards,

Rahul 

On Friday, October 26, 2018 at 5:11:12 PM UTC+5:30, Jim S wrote:
>
> Can you show the entire db.py, default py and index.html?
>
> Jim
>
>
> On Fri, Oct 26, 2018, 1:44 AM Rahul > 
> wrote:
>
>> Nope - doesnt help. I commented out all the user functions defined in the 
>> controller and 
>>
>>
>> #  User functions ---
>> '''def login(): return dict(form=auth.login())
>> def register(): return dict(form=auth.register())
>> def retrieve_password(): return dict(form=auth.reset_password())
>> def logout(): return dict(form=auth.logout())
>> def profile(): return dict(form=auth.profile())
>> '''
>>
>> I even decorated index - It does take me to the login screen but from 
>> there nothing happens. It just wont log me in like it did before. Also,  I 
>> have two users in database but none work now.  Again, register seems to 
>> fail (It did work earlier) but now it doesnt. See screenshot of both 
>> screens. Looks like I must be really doing something weird. If this wont 
>> work by this Sunday. I may go back to my old style of coding and do it all 
>> by myself. I've seriously lost 10 days reading and experimenting with Auth 
>> to make it work . Not too much coded. 
>>
>> @auth.requires_login()
>> def index():
>> response.flash = T("Hello User")
>> #redirect(URL(r=request, c='default/user', f='login')) # Redirects 
>> user to login page
>> return dict(message=T('Welcome to web2py!'))
>>
>>
>>
>> Thanks,
>>
>> Rahul
>>
>>
>>
>> On Thursday, October 25, 2018 at 6:02:45 PM UTC+5:30, Jim S wrote:
>>>
>>> Having the default user() functions is all you need.  I'd try commenting 
>>> out your 'user' functions.
>>>
>>> -Jim
>>>
>>> On Wednesday, October 24, 2018 at 10:59:45 PM UTC-5, Rahul wrote:

 Yes this is in default.py. Please excuse me for my bad code as I am 
 still experimenting with Auth and not totally familiar with the 
 implementation. Is this the right way that I am doing it? or only having 
 user() function is enough ? 

 Thanks, Rahul

 On Wednesday, October 24, 2018 at 9:45:21 PM UTC+5:30, Jim S wrote:
>
> I'm confused.  Is this code in your controller somewhere?
>
> #  User functions ---
> def login(): return dict(form=auth.login())
> def register(): return dict(form=auth.register())
> def retrieve_password(): return dict(form=auth.reset_password())
> def logout(): return dict(form=auth.logout())
> def profile(): return dict(form=auth.profile())
>
> You shouldn't need it.  To override the default login stuff I've just 
> modified the one in default.py.
>
> -Jim
>
>
>
> On Tuesday, October 23, 2018 at 11:26:45 PM UTC-5, Rahul wrote:
>>
>> The user function remains as-is - No modifications done. 
>>
>> def user():
>> """
>> exposes:
>> http:///[app]/default/user/login
>> http:///[app]/default/user/logout
>> http:///[app]/default/user/register
>> http:///[app]/default/user/profile
>> http:///[app]/default/user/retrieve_password
>> http:///[app]/default/user/change_password
>> http:///[app]/default/user/bulk_register
>> use @auth.requires_login()
>> @auth.requires_membership('group name')
>> @auth.requires_permission('read','table name',record_id)
>> to decorate functions that need access control
>> also notice there is http:///[app]/appadmin/manage/auth to 
>> allow administrator to manage users
>> """
>> return dict(form=auth())
>>
>> I am using the specified functions to expose methods as below - 
>> #  User functions ---
>> def login(): return dict(form=auth.login())
>> def register(): return dict(form=auth.register())
>> def retrieve_password(): return dict(form=auth.reset_password())
>> def logout(): return dict(form=auth.logout())
>> def profile(): return dict(form=auth.profile())
>>
>>
>>
>> and the corresponding files reside in \views\  *not in* 
>> \views\default - I am not sure if the application is even picking up 
>> these 
>> files. 
>>
>> Note - I have extended the Auth (auth_user) table and added workspace 
>> and other fields - This will be specified everytime I add a new user. I 
>> would filter out the results as you mentioned but only after all the 
>> login 
>> stuff works properly.
>>
>> auth.settings.extra_fields['auth_user'] = [
>> Field ('workspace', length=128),
>>
>> Sincerely,

Re: [web2py] Re: Auth question

2018-10-26 Thread Jim Steil
Can you show the entire db.py, default py and index.html?

Jim


On Fri, Oct 26, 2018, 1:44 AM Rahul  wrote:

> Nope - doesnt help. I commented out all the user functions defined in the
> controller and
>
>
> #  User functions ---
> '''def login(): return dict(form=auth.login())
> def register(): return dict(form=auth.register())
> def retrieve_password(): return dict(form=auth.reset_password())
> def logout(): return dict(form=auth.logout())
> def profile(): return dict(form=auth.profile())
> '''
>
> I even decorated index - It does take me to the login screen but from
> there nothing happens. It just wont log me in like it did before. Also,  I
> have two users in database but none work now.  Again, register seems to
> fail (It did work earlier) but now it doesnt. See screenshot of both
> screens. Looks like I must be really doing something weird. If this wont
> work by this Sunday. I may go back to my old style of coding and do it all
> by myself. I've seriously lost 10 days reading and experimenting with Auth
> to make it work . Not too much coded.
>
> @auth.requires_login()
> def index():
> response.flash = T("Hello User")
> #redirect(URL(r=request, c='default/user', f='login')) # Redirects
> user to login page
> return dict(message=T('Welcome to web2py!'))
>
>
>
> Thanks,
>
> Rahul
>
>
>
> On Thursday, October 25, 2018 at 6:02:45 PM UTC+5:30, Jim S wrote:
>>
>> Having the default user() functions is all you need.  I'd try commenting
>> out your 'user' functions.
>>
>> -Jim
>>
>> On Wednesday, October 24, 2018 at 10:59:45 PM UTC-5, Rahul wrote:
>>>
>>> Yes this is in default.py. Please excuse me for my bad code as I am
>>> still experimenting with Auth and not totally familiar with the
>>> implementation. Is this the right way that I am doing it? or only having
>>> user() function is enough ?
>>>
>>> Thanks, Rahul
>>>
>>> On Wednesday, October 24, 2018 at 9:45:21 PM UTC+5:30, Jim S wrote:

 I'm confused.  Is this code in your controller somewhere?

 #  User functions ---
 def login(): return dict(form=auth.login())
 def register(): return dict(form=auth.register())
 def retrieve_password(): return dict(form=auth.reset_password())
 def logout(): return dict(form=auth.logout())
 def profile(): return dict(form=auth.profile())

 You shouldn't need it.  To override the default login stuff I've just
 modified the one in default.py.

 -Jim



 On Tuesday, October 23, 2018 at 11:26:45 PM UTC-5, Rahul wrote:
>
> The user function remains as-is - No modifications done.
>
> def user():
> """
> exposes:
> http:///[app]/default/user/login
> http:///[app]/default/user/logout
> http:///[app]/default/user/register
> http:///[app]/default/user/profile
> http:///[app]/default/user/retrieve_password
> http:///[app]/default/user/change_password
> http:///[app]/default/user/bulk_register
> use @auth.requires_login()
> @auth.requires_membership('group name')
> @auth.requires_permission('read','table name',record_id)
> to decorate functions that need access control
> also notice there is http:///[app]/appadmin/manage/auth to
> allow administrator to manage users
> """
> return dict(form=auth())
>
> I am using the specified functions to expose methods as below -
> #  User functions ---
> def login(): return dict(form=auth.login())
> def register(): return dict(form=auth.register())
> def retrieve_password(): return dict(form=auth.reset_password())
> def logout(): return dict(form=auth.logout())
> def profile(): return dict(form=auth.profile())
>
>
>
> and the corresponding files reside in \views\  *not in*
> \views\default - I am not sure if the application is even picking up these
> files.
>
> Note - I have extended the Auth (auth_user) table and added workspace
> and other fields - This will be specified everytime I add a new user. I
> would filter out the results as you mentioned but only after all the login
> stuff works properly.
>
> auth.settings.extra_fields['auth_user'] = [
> Field ('workspace', length=128),
>
> Sincerely,
>
> Rahul
>
> On Tuesday, October 23, 2018 at 7:49:48 PM UTC+5:30, Jim S wrote:
>>
>> Did you modify the user() function in default.py?  Or, are you using
>> your own custom login functions?
>>
>> -Jim
>>
>> On Tuesday, October 23, 2018 at 7:59:21 AM UTC-5, Rahul wrote:
>>>
>>> Hi Jim, All,
>>>  Okay I tried this - And I also decorated index() function
>>> in controller like below as I want to redirect the user to login page
>>> rather than directly jumping to index.html
>>>
>>> #  example index page 
>>> @auth.requires_login()

Re: [web2py] Re: Auth question

2018-10-26 Thread Dave S


On Thursday, October 25, 2018 at 11:44:18 PM UTC-7, Rahul wrote:
[...] 

> I even decorated index - It does take me to the login screen but from 
> there nothing happens. It just wont log me in like it did before. Also,  I 
> have two users in database but none work now.  Again, register seems to 
> fail (It did work earlier) but now it doesnt. See screenshot of both 
> screens. Looks like I must be really doing something weird. If this wont 
> work by this Sunday. I may go back to my old style of coding and do it all 
> by myself. I've seriously lost 10 days reading and experimenting with Auth 
> to make it work . Not too much coded. 
>
>  
Perhaps you should show your changes to the Auth tables.  I haven't used 
'extra' fields myself, but the discussions I've seen in this group over the 
years make it seem a much smaller effort than you seem to be going 
through.  Most people just go from the discussion in the book, from what 
I've seen.

/dps

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [web2py] Re: Auth question

2018-10-26 Thread Rahul
Nope - doesnt help. I commented out all the user functions defined in the 
controller and 


#  User functions ---
'''def login(): return dict(form=auth.login())
def register(): return dict(form=auth.register())
def retrieve_password(): return dict(form=auth.reset_password())
def logout(): return dict(form=auth.logout())
def profile(): return dict(form=auth.profile())
'''

I even decorated index - It does take me to the login screen but from there 
nothing happens. It just wont log me in like it did before. Also,  I have 
two users in database but none work now.  Again, register seems to fail (It 
did work earlier) but now it doesnt. See screenshot of both screens. Looks 
like I must be really doing something weird. If this wont work by this 
Sunday. I may go back to my old style of coding and do it all by myself. 
I've seriously lost 10 days reading and experimenting with Auth to make it 
work . Not too much coded. 

@auth.requires_login()
def index():
response.flash = T("Hello User")
#redirect(URL(r=request, c='default/user', f='login')) # Redirects user 
to login page
return dict(message=T('Welcome to web2py!'))



Thanks,

Rahul



On Thursday, October 25, 2018 at 6:02:45 PM UTC+5:30, Jim S wrote:
>
> Having the default user() functions is all you need.  I'd try commenting 
> out your 'user' functions.
>
> -Jim
>
> On Wednesday, October 24, 2018 at 10:59:45 PM UTC-5, Rahul wrote:
>>
>> Yes this is in default.py. Please excuse me for my bad code as I am still 
>> experimenting with Auth and not totally familiar with the implementation. 
>> Is this the right way that I am doing it? or only having user() function is 
>> enough ? 
>>
>> Thanks, Rahul
>>
>> On Wednesday, October 24, 2018 at 9:45:21 PM UTC+5:30, Jim S wrote:
>>>
>>> I'm confused.  Is this code in your controller somewhere?
>>>
>>> #  User functions ---
>>> def login(): return dict(form=auth.login())
>>> def register(): return dict(form=auth.register())
>>> def retrieve_password(): return dict(form=auth.reset_password())
>>> def logout(): return dict(form=auth.logout())
>>> def profile(): return dict(form=auth.profile())
>>>
>>> You shouldn't need it.  To override the default login stuff I've just 
>>> modified the one in default.py.
>>>
>>> -Jim
>>>
>>>
>>>
>>> On Tuesday, October 23, 2018 at 11:26:45 PM UTC-5, Rahul wrote:

 The user function remains as-is - No modifications done. 

 def user():
 """
 exposes:
 http:///[app]/default/user/login
 http:///[app]/default/user/logout
 http:///[app]/default/user/register
 http:///[app]/default/user/profile
 http:///[app]/default/user/retrieve_password
 http:///[app]/default/user/change_password
 http:///[app]/default/user/bulk_register
 use @auth.requires_login()
 @auth.requires_membership('group name')
 @auth.requires_permission('read','table name',record_id)
 to decorate functions that need access control
 also notice there is http:///[app]/appadmin/manage/auth to 
 allow administrator to manage users
 """
 return dict(form=auth())

 I am using the specified functions to expose methods as below - 
 #  User functions ---
 def login(): return dict(form=auth.login())
 def register(): return dict(form=auth.register())
 def retrieve_password(): return dict(form=auth.reset_password())
 def logout(): return dict(form=auth.logout())
 def profile(): return dict(form=auth.profile())



 and the corresponding files reside in \views\  *not in* \views\default 
 - I am not sure if the application is even picking up these files. 

 Note - I have extended the Auth (auth_user) table and added workspace 
 and other fields - This will be specified everytime I add a new user. I 
 would filter out the results as you mentioned but only after all the login 
 stuff works properly.

 auth.settings.extra_fields['auth_user'] = [
 Field ('workspace', length=128),

 Sincerely,

 Rahul 

 On Tuesday, October 23, 2018 at 7:49:48 PM UTC+5:30, Jim S wrote:
>
> Did you modify the user() function in default.py?  Or, are you using 
> your own custom login functions?
>
> -Jim
>
> On Tuesday, October 23, 2018 at 7:59:21 AM UTC-5, Rahul wrote:
>>
>> Hi Jim, All,
>>  Okay I tried this - And I also decorated index() function in 
>> controller like below as I want to redirect the user to login page 
>> rather 
>> than directly jumping to index.html 
>>
>> #  example index page 
>> @auth.requires_login()
>> def index():
>> response.flash= T("Hello World")
>> return dict(message=T('Welcome to web2py!'))
>>
>> However, now when I put the credentials username and password, it 
>> doesnt log me in - I generates 

Re: [web2py] Re: Auth question

2018-10-25 Thread Jim S
Having the default user() functions is all you need.  I'd try commenting 
out your 'user' functions.

-Jim

On Wednesday, October 24, 2018 at 10:59:45 PM UTC-5, Rahul wrote:
>
> Yes this is in default.py. Please excuse me for my bad code as I am still 
> experimenting with Auth and not totally familiar with the implementation. 
> Is this the right way that I am doing it? or only having user() function is 
> enough ? 
>
> Thanks, Rahul
>
> On Wednesday, October 24, 2018 at 9:45:21 PM UTC+5:30, Jim S wrote:
>>
>> I'm confused.  Is this code in your controller somewhere?
>>
>> #  User functions ---
>> def login(): return dict(form=auth.login())
>> def register(): return dict(form=auth.register())
>> def retrieve_password(): return dict(form=auth.reset_password())
>> def logout(): return dict(form=auth.logout())
>> def profile(): return dict(form=auth.profile())
>>
>> You shouldn't need it.  To override the default login stuff I've just 
>> modified the one in default.py.
>>
>> -Jim
>>
>>
>>
>> On Tuesday, October 23, 2018 at 11:26:45 PM UTC-5, Rahul wrote:
>>>
>>> The user function remains as-is - No modifications done. 
>>>
>>> def user():
>>> """
>>> exposes:
>>> http:///[app]/default/user/login
>>> http:///[app]/default/user/logout
>>> http:///[app]/default/user/register
>>> http:///[app]/default/user/profile
>>> http:///[app]/default/user/retrieve_password
>>> http:///[app]/default/user/change_password
>>> http:///[app]/default/user/bulk_register
>>> use @auth.requires_login()
>>> @auth.requires_membership('group name')
>>> @auth.requires_permission('read','table name',record_id)
>>> to decorate functions that need access control
>>> also notice there is http:///[app]/appadmin/manage/auth to allow 
>>> administrator to manage users
>>> """
>>> return dict(form=auth())
>>>
>>> I am using the specified functions to expose methods as below - 
>>> #  User functions ---
>>> def login(): return dict(form=auth.login())
>>> def register(): return dict(form=auth.register())
>>> def retrieve_password(): return dict(form=auth.reset_password())
>>> def logout(): return dict(form=auth.logout())
>>> def profile(): return dict(form=auth.profile())
>>>
>>>
>>>
>>> and the corresponding files reside in \views\  *not in* \views\default 
>>> - I am not sure if the application is even picking up these files. 
>>>
>>> Note - I have extended the Auth (auth_user) table and added workspace 
>>> and other fields - This will be specified everytime I add a new user. I 
>>> would filter out the results as you mentioned but only after all the login 
>>> stuff works properly.
>>>
>>> auth.settings.extra_fields['auth_user'] = [
>>> Field ('workspace', length=128),
>>>
>>> Sincerely,
>>>
>>> Rahul 
>>>
>>> On Tuesday, October 23, 2018 at 7:49:48 PM UTC+5:30, Jim S wrote:

 Did you modify the user() function in default.py?  Or, are you using 
 your own custom login functions?

 -Jim

 On Tuesday, October 23, 2018 at 7:59:21 AM UTC-5, Rahul wrote:
>
> Hi Jim, All,
>  Okay I tried this - And I also decorated index() function in 
> controller like below as I want to redirect the user to login page rather 
> than directly jumping to index.html 
>
> #  example index page 
> @auth.requires_login()
> def index():
> response.flash= T("Hello World")
> return dict(message=T('Welcome to web2py!'))
>
> However, now when I put the credentials username and password, it 
> doesnt log me in - I generates the below URL like below and appends it to 
> url box. What might I be missing because it was logging me in fine 
> sometime 
> ago but now it doesnt allow. Note I did cleanup a lot of HTML code from 
> my 
> login page. There sure is something going on here that I am not catching 
> - 
>
>
>
> http://
> 127.0.0.1:8000/scaffolding_app/default/user/login?username=rahul=integer10&_next=%2Fscaffolding_ace_admin%2Fdefault%2Findex&_formkey=0c0c022a-377d-47dd-bd72-a13e8ee6f387&_formname=login
>
>
>
>  
>
> Sincerely, Rahul D. 
>
>
> On Friday, October 19, 2018 at 12:24:19 PM UTC+5:30, Rahul wrote:
>>
>> Hi Jim,
>> That makes sense. I will check it out on which option to go. 
>> Thanks! for all the guidance. 
>>
>> Thank you,
>>
>> *Rahul Dhakate*
>>
>> On Wednesday, October 17, 2018 at 7:57:32 PM UTC+5:30, Jim S wrote:
>>>
>>> Rahul
>>>
>>> First, what I was referring to was common_filters, not common 
>>> fields.  Here is the scenario as I see it.
>>>
>>> In you auth_user table you have a workspace field.  Then in other 
>>> tables that are workspace-specific you also have a workspace field to 
>>> show 
>>> which workspace they relate to
>>>
>>> Here is how I 

Re: [web2py] Re: Auth question

2018-10-24 Thread Rahul
Yes this is in default.py. Please excuse me for my bad code as I am still 
experimenting with Auth and not totally familiar with the implementation. 
Is this the right way that I am doing it? or only having user() function is 
enough ? 

Thanks, Rahul

On Wednesday, October 24, 2018 at 9:45:21 PM UTC+5:30, Jim S wrote:
>
> I'm confused.  Is this code in your controller somewhere?
>
> #  User functions ---
> def login(): return dict(form=auth.login())
> def register(): return dict(form=auth.register())
> def retrieve_password(): return dict(form=auth.reset_password())
> def logout(): return dict(form=auth.logout())
> def profile(): return dict(form=auth.profile())
>
> You shouldn't need it.  To override the default login stuff I've just 
> modified the one in default.py.
>
> -Jim
>
>
>
> On Tuesday, October 23, 2018 at 11:26:45 PM UTC-5, Rahul wrote:
>>
>> The user function remains as-is - No modifications done. 
>>
>> def user():
>> """
>> exposes:
>> http:///[app]/default/user/login
>> http:///[app]/default/user/logout
>> http:///[app]/default/user/register
>> http:///[app]/default/user/profile
>> http:///[app]/default/user/retrieve_password
>> http:///[app]/default/user/change_password
>> http:///[app]/default/user/bulk_register
>> use @auth.requires_login()
>> @auth.requires_membership('group name')
>> @auth.requires_permission('read','table name',record_id)
>> to decorate functions that need access control
>> also notice there is http:///[app]/appadmin/manage/auth to allow 
>> administrator to manage users
>> """
>> return dict(form=auth())
>>
>> I am using the specified functions to expose methods as below - 
>> #  User functions ---
>> def login(): return dict(form=auth.login())
>> def register(): return dict(form=auth.register())
>> def retrieve_password(): return dict(form=auth.reset_password())
>> def logout(): return dict(form=auth.logout())
>> def profile(): return dict(form=auth.profile())
>>
>>
>>
>> and the corresponding files reside in \views\  *not in* \views\default - 
>> I am not sure if the application is even picking up these files. 
>>
>> Note - I have extended the Auth (auth_user) table and added workspace and 
>> other fields - This will be specified everytime I add a new user. I would 
>> filter out the results as you mentioned but only after all the login stuff 
>> works properly.
>>
>> auth.settings.extra_fields['auth_user'] = [
>> Field ('workspace', length=128),
>>
>> Sincerely,
>>
>> Rahul 
>>
>> On Tuesday, October 23, 2018 at 7:49:48 PM UTC+5:30, Jim S wrote:
>>>
>>> Did you modify the user() function in default.py?  Or, are you using 
>>> your own custom login functions?
>>>
>>> -Jim
>>>
>>> On Tuesday, October 23, 2018 at 7:59:21 AM UTC-5, Rahul wrote:

 Hi Jim, All,
  Okay I tried this - And I also decorated index() function in 
 controller like below as I want to redirect the user to login page rather 
 than directly jumping to index.html 

 #  example index page 
 @auth.requires_login()
 def index():
 response.flash= T("Hello World")
 return dict(message=T('Welcome to web2py!'))

 However, now when I put the credentials username and password, it 
 doesnt log me in - I generates the below URL like below and appends it to 
 url box. What might I be missing because it was logging me in fine 
 sometime 
 ago but now it doesnt allow. Note I did cleanup a lot of HTML code from my 
 login page. There sure is something going on here that I am not catching - 



 http://
 127.0.0.1:8000/scaffolding_app/default/user/login?username=rahul=integer10&_next=%2Fscaffolding_ace_admin%2Fdefault%2Findex&_formkey=0c0c022a-377d-47dd-bd72-a13e8ee6f387&_formname=login



  

 Sincerely, Rahul D. 


 On Friday, October 19, 2018 at 12:24:19 PM UTC+5:30, Rahul wrote:
>
> Hi Jim,
> That makes sense. I will check it out on which option to go. 
> Thanks! for all the guidance. 
>
> Thank you,
>
> *Rahul Dhakate*
>
> On Wednesday, October 17, 2018 at 7:57:32 PM UTC+5:30, Jim S wrote:
>>
>> Rahul
>>
>> First, what I was referring to was common_filters, not common 
>> fields.  Here is the scenario as I see it.
>>
>> In you auth_user table you have a workspace field.  Then in other 
>> tables that are workspace-specific you also have a workspace field to 
>> show 
>> which workspace they relate to
>>
>> Here is how I think I would handle it, assuming I am understanding 
>> your need.  And, assuming that the workspace identifier is stored on the 
>> user record.  You wouldn't gather it on the login page.
>>
>> In db.py I'd have code that would check to see if the user is logged 
>> in.  If so, then set the common filters for 

Re: [web2py] Re: Auth question

2018-10-24 Thread Jim S
I'm confused.  Is this code in your controller somewhere?

#  User functions ---
def login(): return dict(form=auth.login())
def register(): return dict(form=auth.register())
def retrieve_password(): return dict(form=auth.reset_password())
def logout(): return dict(form=auth.logout())
def profile(): return dict(form=auth.profile())

You shouldn't need it.  To override the default login stuff I've just 
modified the one in default.py.

-Jim



On Tuesday, October 23, 2018 at 11:26:45 PM UTC-5, Rahul wrote:
>
> The user function remains as-is - No modifications done. 
>
> def user():
> """
> exposes:
> http:///[app]/default/user/login
> http:///[app]/default/user/logout
> http:///[app]/default/user/register
> http:///[app]/default/user/profile
> http:///[app]/default/user/retrieve_password
> http:///[app]/default/user/change_password
> http:///[app]/default/user/bulk_register
> use @auth.requires_login()
> @auth.requires_membership('group name')
> @auth.requires_permission('read','table name',record_id)
> to decorate functions that need access control
> also notice there is http:///[app]/appadmin/manage/auth to allow 
> administrator to manage users
> """
> return dict(form=auth())
>
> I am using the specified functions to expose methods as below - 
> #  User functions ---
> def login(): return dict(form=auth.login())
> def register(): return dict(form=auth.register())
> def retrieve_password(): return dict(form=auth.reset_password())
> def logout(): return dict(form=auth.logout())
> def profile(): return dict(form=auth.profile())
>
>
>
> and the corresponding files reside in \views\  *not in* \views\default - 
> I am not sure if the application is even picking up these files. 
>
> Note - I have extended the Auth (auth_user) table and added workspace and 
> other fields - This will be specified everytime I add a new user. I would 
> filter out the results as you mentioned but only after all the login stuff 
> works properly.
>
> auth.settings.extra_fields['auth_user'] = [
> Field ('workspace', length=128),
>
> Sincerely,
>
> Rahul 
>
> On Tuesday, October 23, 2018 at 7:49:48 PM UTC+5:30, Jim S wrote:
>>
>> Did you modify the user() function in default.py?  Or, are you using your 
>> own custom login functions?
>>
>> -Jim
>>
>> On Tuesday, October 23, 2018 at 7:59:21 AM UTC-5, Rahul wrote:
>>>
>>> Hi Jim, All,
>>>  Okay I tried this - And I also decorated index() function in 
>>> controller like below as I want to redirect the user to login page rather 
>>> than directly jumping to index.html 
>>>
>>> #  example index page 
>>> @auth.requires_login()
>>> def index():
>>> response.flash= T("Hello World")
>>> return dict(message=T('Welcome to web2py!'))
>>>
>>> However, now when I put the credentials username and password, it doesnt 
>>> log me in - I generates the below URL like below and appends it to url box. 
>>> What might I be missing because it was logging me in fine sometime ago but 
>>> now it doesnt allow. Note I did cleanup a lot of HTML code from my login 
>>> page. There sure is something going on here that I am not catching - 
>>>
>>>
>>>
>>> http://
>>> 127.0.0.1:8000/scaffolding_app/default/user/login?username=rahul=integer10&_next=%2Fscaffolding_ace_admin%2Fdefault%2Findex&_formkey=0c0c022a-377d-47dd-bd72-a13e8ee6f387&_formname=login
>>>
>>>
>>>
>>>  
>>>
>>> Sincerely, Rahul D. 
>>>
>>>
>>> On Friday, October 19, 2018 at 12:24:19 PM UTC+5:30, Rahul wrote:

 Hi Jim,
 That makes sense. I will check it out on which option to go. 
 Thanks! for all the guidance. 

 Thank you,

 *Rahul Dhakate*

 On Wednesday, October 17, 2018 at 7:57:32 PM UTC+5:30, Jim S wrote:
>
> Rahul
>
> First, what I was referring to was common_filters, not common fields.  
> Here is the scenario as I see it.
>
> In you auth_user table you have a workspace field.  Then in other 
> tables that are workspace-specific you also have a workspace field to 
> show 
> which workspace they relate to
>
> Here is how I think I would handle it, assuming I am understanding 
> your need.  And, assuming that the workspace identifier is stored on the 
> user record.  You wouldn't gather it on the login page.
>
> In db.py I'd have code that would check to see if the user is logged 
> in.  If so, then set the common filters for the workspace-specific tables
>
> if auth.is_logged_in:
>> db.related_table_1._common_filter = lambda query: 
>> db.related_table_1.workspace = auth.user.workspace
>> db.related_table_2._common_filter = lambda query: 
>> db.related_table_2.workspace = auth.user.workspace
>> db.related_table_3._common_filter = lambda query: 
>> db.related_table_3.workspace = auth.user.workspace
>> db.related_table_4._common_filter = 

Re: [web2py] Re: Auth question

2018-10-23 Thread Rahul
The user function remains as-is - No modifications done. 

def user():
"""
exposes:
http:///[app]/default/user/login
http:///[app]/default/user/logout
http:///[app]/default/user/register
http:///[app]/default/user/profile
http:///[app]/default/user/retrieve_password
http:///[app]/default/user/change_password
http:///[app]/default/user/bulk_register
use @auth.requires_login()
@auth.requires_membership('group name')
@auth.requires_permission('read','table name',record_id)
to decorate functions that need access control
also notice there is http:///[app]/appadmin/manage/auth to allow 
administrator to manage users
"""
return dict(form=auth())

I am using the specified functions to expose methods as below - 
#  User functions ---
def login(): return dict(form=auth.login())
def register(): return dict(form=auth.register())
def retrieve_password(): return dict(form=auth.reset_password())
def logout(): return dict(form=auth.logout())
def profile(): return dict(form=auth.profile())



and the corresponding files reside in \views\  *not in* \views\default - I 
am not sure if the application is even picking up these files. 

Note - I have extended the Auth (auth_user) table and added workspace and 
other fields - This will be specified everytime I add a new user. I would 
filter out the results as you mentioned but only after all the login stuff 
works properly.

auth.settings.extra_fields['auth_user'] = [
Field ('workspace', length=128),

Sincerely,

Rahul 

On Tuesday, October 23, 2018 at 7:49:48 PM UTC+5:30, Jim S wrote:
>
> Did you modify the user() function in default.py?  Or, are you using your 
> own custom login functions?
>
> -Jim
>
> On Tuesday, October 23, 2018 at 7:59:21 AM UTC-5, Rahul wrote:
>>
>> Hi Jim, All,
>>  Okay I tried this - And I also decorated index() function in 
>> controller like below as I want to redirect the user to login page rather 
>> than directly jumping to index.html 
>>
>> #  example index page 
>> @auth.requires_login()
>> def index():
>> response.flash= T("Hello World")
>> return dict(message=T('Welcome to web2py!'))
>>
>> However, now when I put the credentials username and password, it doesnt 
>> log me in - I generates the below URL like below and appends it to url box. 
>> What might I be missing because it was logging me in fine sometime ago but 
>> now it doesnt allow. Note I did cleanup a lot of HTML code from my login 
>> page. There sure is something going on here that I am not catching - 
>>
>>
>>
>> http://
>> 127.0.0.1:8000/scaffolding_app/default/user/login?username=rahul=integer10&_next=%2Fscaffolding_ace_admin%2Fdefault%2Findex&_formkey=0c0c022a-377d-47dd-bd72-a13e8ee6f387&_formname=login
>>
>>
>>
>>  
>>
>> Sincerely, Rahul D. 
>>
>>
>> On Friday, October 19, 2018 at 12:24:19 PM UTC+5:30, Rahul wrote:
>>>
>>> Hi Jim,
>>> That makes sense. I will check it out on which option to go. 
>>> Thanks! for all the guidance. 
>>>
>>> Thank you,
>>>
>>> *Rahul Dhakate*
>>>
>>> On Wednesday, October 17, 2018 at 7:57:32 PM UTC+5:30, Jim S wrote:

 Rahul

 First, what I was referring to was common_filters, not common fields.  
 Here is the scenario as I see it.

 In you auth_user table you have a workspace field.  Then in other 
 tables that are workspace-specific you also have a workspace field to show 
 which workspace they relate to

 Here is how I think I would handle it, assuming I am understanding your 
 need.  And, assuming that the workspace identifier is stored on the user 
 record.  You wouldn't gather it on the login page.

 In db.py I'd have code that would check to see if the user is logged 
 in.  If so, then set the common filters for the workspace-specific tables

 if auth.is_logged_in:
> db.related_table_1._common_filter = lambda query: 
> db.related_table_1.workspace = auth.user.workspace
> db.related_table_2._common_filter = lambda query: 
> db.related_table_2.workspace = auth.user.workspace
> db.related_table_3._common_filter = lambda query: 
> db.related_table_3.workspace = auth.user.workspace
> db.related_table_4._common_filter = lambda query: 
> db.related_table_4.workspace = auth.user.workspace
> ...etc...


 Make sense?

 Anyone else out there that's done this and can show a better way?  

 -Jim


 NOTE - you might also skip the common filters if you're logging in as 
 an admin.  Then you might want to see data for all workspaces

 NOTE 2 - If you really want people to specify their workspace when they 
 login (meaning they have access to all of them but they choose which one 
 on 
 login) then you'd have to override the default login code to gather that 
 extra variable and store it in your session somewhere.  Then 

Re: [web2py] Re: Auth question

2018-10-23 Thread Jim S
Did you modify the user() function in default.py?  Or, are you using your 
own custom login functions?

-Jim

On Tuesday, October 23, 2018 at 7:59:21 AM UTC-5, Rahul wrote:
>
> Hi Jim, All,
>  Okay I tried this - And I also decorated index() function in 
> controller like below as I want to redirect the user to login page rather 
> than directly jumping to index.html 
>
> #  example index page 
> @auth.requires_login()
> def index():
> response.flash= T("Hello World")
> return dict(message=T('Welcome to web2py!'))
>
> However, now when I put the credentials username and password, it doesnt 
> log me in - I generates the below URL like below and appends it to url box. 
> What might I be missing because it was logging me in fine sometime ago but 
> now it doesnt allow. Note I did cleanup a lot of HTML code from my login 
> page. There sure is something going on here that I am not catching - 
>
>
>
> http://
> 127.0.0.1:8000/scaffolding_app/default/user/login?username=rahul=integer10&_next=%2Fscaffolding_ace_admin%2Fdefault%2Findex&_formkey=0c0c022a-377d-47dd-bd72-a13e8ee6f387&_formname=login
>
>
>
>  
>
> Sincerely, Rahul D. 
>
>
> On Friday, October 19, 2018 at 12:24:19 PM UTC+5:30, Rahul wrote:
>>
>> Hi Jim,
>> That makes sense. I will check it out on which option to go. 
>> Thanks! for all the guidance. 
>>
>> Thank you,
>>
>> *Rahul Dhakate*
>>
>> On Wednesday, October 17, 2018 at 7:57:32 PM UTC+5:30, Jim S wrote:
>>>
>>> Rahul
>>>
>>> First, what I was referring to was common_filters, not common fields.  
>>> Here is the scenario as I see it.
>>>
>>> In you auth_user table you have a workspace field.  Then in other tables 
>>> that are workspace-specific you also have a workspace field to show which 
>>> workspace they relate to
>>>
>>> Here is how I think I would handle it, assuming I am understanding your 
>>> need.  And, assuming that the workspace identifier is stored on the user 
>>> record.  You wouldn't gather it on the login page.
>>>
>>> In db.py I'd have code that would check to see if the user is logged 
>>> in.  If so, then set the common filters for the workspace-specific tables
>>>
>>> if auth.is_logged_in:
 db.related_table_1._common_filter = lambda query: 
 db.related_table_1.workspace = auth.user.workspace
 db.related_table_2._common_filter = lambda query: 
 db.related_table_2.workspace = auth.user.workspace
 db.related_table_3._common_filter = lambda query: 
 db.related_table_3.workspace = auth.user.workspace
 db.related_table_4._common_filter = lambda query: 
 db.related_table_4.workspace = auth.user.workspace
 ...etc...
>>>
>>>
>>> Make sense?
>>>
>>> Anyone else out there that's done this and can show a better way?  
>>>
>>> -Jim
>>>
>>>
>>> NOTE - you might also skip the common filters if you're logging in as an 
>>> admin.  Then you might want to see data for all workspaces
>>>
>>> NOTE 2 - If you really want people to specify their workspace when they 
>>> login (meaning they have access to all of them but they choose which one on 
>>> login) then you'd have to override the default login code to gather that 
>>> extra variable and store it in your session somewhere.  Then use that 
>>> instead of auth.user.workspace when building your filters.
>>>
>>>
>>>
>>> On Wed, Oct 17, 2018 at 2:06 AM Rahul  wrote:
>>>
 Hi Jim,
   I am afraid no I didn't check that section but I just 
 finished reading it. Thanks! for directing me to it. Looks like a new 
 addition to DAL (might be a couple of versions back) & looks promising. So 
 now, we can specify something like request_tenant using db._common_fields  
 field parameter. 

 I would need it for all tables so is there a specific syntax like below 
 that I am required to specify in each table I create ?

 db._common_fields.append(Field('request_tenant',
default=request.env.http_host,
writable=False))


 Also, can we set the default value to a field value that we can query 
 or pass as a session variable like session.workspace == 'some workspace 
 name'  while the user logs in ? 

 default=session.workspace,


 If yes - what do I need to modify to add this additional field in Auth 
 so it will be an input field for the user to key in the workspace name. 
 Then I can store this workspace in session variable and use it. The reason 
 is I want a group of users (accessing the same app and database from 
 different locations) belonging to same workspace.  This is how they are 
 grouped. please see the screenshot posted from my actual application 
 login. 
 In it I use workspace name as well to validate but after reading the book 
 seems like we would not require workspace for validation if we can have 
 the 
 user provide the field for redirection and for us 

Re: [web2py] Re: Auth question

2018-10-23 Thread Rahul
Hi Jim, All,
 Okay I tried this - And I also decorated index() function in 
controller like below as I want to redirect the user to login page rather 
than directly jumping to index.html 

#  example index page 
@auth.requires_login()
def index():
response.flash= T("Hello World")
return dict(message=T('Welcome to web2py!'))

However, now when I put the credentials username and password, it doesnt 
log me in - I generates the below URL like below and appends it to url box. 
What might I be missing because it was logging me in fine sometime ago but 
now it doesnt allow. Note I did cleanup a lot of HTML code from my login 
page. There sure is something going on here that I am not catching - 



http:
//127.0.0.1:8000/scaffolding_app/default/user/login?username=rahul=integer10&_next=%2Fscaffolding_ace_admin%2Fdefault%2Findex&_formkey=0c0c022a-377d-47dd-bd72-a13e8ee6f387&_formname=login



 

Sincerely, Rahul D. 


On Friday, October 19, 2018 at 12:24:19 PM UTC+5:30, Rahul wrote:
>
> Hi Jim,
> That makes sense. I will check it out on which option to go. 
> Thanks! for all the guidance. 
>
> Thank you,
>
> *Rahul Dhakate*
>
> On Wednesday, October 17, 2018 at 7:57:32 PM UTC+5:30, Jim S wrote:
>>
>> Rahul
>>
>> First, what I was referring to was common_filters, not common fields.  
>> Here is the scenario as I see it.
>>
>> In you auth_user table you have a workspace field.  Then in other tables 
>> that are workspace-specific you also have a workspace field to show which 
>> workspace they relate to
>>
>> Here is how I think I would handle it, assuming I am understanding your 
>> need.  And, assuming that the workspace identifier is stored on the user 
>> record.  You wouldn't gather it on the login page.
>>
>> In db.py I'd have code that would check to see if the user is logged in.  
>> If so, then set the common filters for the workspace-specific tables
>>
>> if auth.is_logged_in:
>>> db.related_table_1._common_filter = lambda query: 
>>> db.related_table_1.workspace = auth.user.workspace
>>> db.related_table_2._common_filter = lambda query: 
>>> db.related_table_2.workspace = auth.user.workspace
>>> db.related_table_3._common_filter = lambda query: 
>>> db.related_table_3.workspace = auth.user.workspace
>>> db.related_table_4._common_filter = lambda query: 
>>> db.related_table_4.workspace = auth.user.workspace
>>> ...etc...
>>
>>
>> Make sense?
>>
>> Anyone else out there that's done this and can show a better way?  
>>
>> -Jim
>>
>>
>> NOTE - you might also skip the common filters if you're logging in as an 
>> admin.  Then you might want to see data for all workspaces
>>
>> NOTE 2 - If you really want people to specify their workspace when they 
>> login (meaning they have access to all of them but they choose which one on 
>> login) then you'd have to override the default login code to gather that 
>> extra variable and store it in your session somewhere.  Then use that 
>> instead of auth.user.workspace when building your filters.
>>
>>
>>
>> On Wed, Oct 17, 2018 at 2:06 AM Rahul  wrote:
>>
>>> Hi Jim,
>>>   I am afraid no I didn't check that section but I just finished 
>>> reading it. Thanks! for directing me to it. Looks like a new addition to 
>>> DAL (might be a couple of versions back) & looks promising. So now, we can 
>>> specify something like request_tenant using db._common_fields  field 
>>> parameter. 
>>>
>>> I would need it for all tables so is there a specific syntax like below 
>>> that I am required to specify in each table I create ?
>>>
>>> db._common_fields.append(Field('request_tenant',
>>>default=request.env.http_host,
>>>writable=False))
>>>
>>>
>>> Also, can we set the default value to a field value that we can query or 
>>> pass as a session variable like session.workspace == 'some workspace name'  
>>> while the user logs in ? 
>>>
>>> default=session.workspace,
>>>
>>>
>>> If yes - what do I need to modify to add this additional field in Auth 
>>> so it will be an input field for the user to key in the workspace name. 
>>> Then I can store this workspace in session variable and use it. The reason 
>>> is I want a group of users (accessing the same app and database from 
>>> different locations) belonging to same workspace.  This is how they are 
>>> grouped. please see the screenshot posted from my actual application login. 
>>> In it I use workspace name as well to validate but after reading the book 
>>> seems like we would not require workspace for validation if we can have the 
>>> user provide the field for redirection and for us to grab the session 
>>> variable. 
>>>
>>> Or is this not needed at all after we use common fields ?  
>>>
>>> I hope I am clear and make sense  :-) 
>>>
>>> Regards,
>>>
>>> Rahul
>>>
>>>
>>>
>>>
>>>
>>> On Tuesday, October 16, 2018 at 7:49:49 PM UTC+5:30, Jim S wrote:

 Have you looked at common filters?



Re: [web2py] Re: Auth question

2018-10-19 Thread Rahul
Hi Jim,
That makes sense. I will check it out on which option to go. 
Thanks! for all the guidance. 

Thank you,

*Rahul Dhakate*

On Wednesday, October 17, 2018 at 7:57:32 PM UTC+5:30, Jim S wrote:
>
> Rahul
>
> First, what I was referring to was common_filters, not common fields.  
> Here is the scenario as I see it.
>
> In you auth_user table you have a workspace field.  Then in other tables 
> that are workspace-specific you also have a workspace field to show which 
> workspace they relate to
>
> Here is how I think I would handle it, assuming I am understanding your 
> need.  And, assuming that the workspace identifier is stored on the user 
> record.  You wouldn't gather it on the login page.
>
> In db.py I'd have code that would check to see if the user is logged in.  
> If so, then set the common filters for the workspace-specific tables
>
> if auth.is_logged_in:
>> db.related_table_1._common_filter = lambda query: 
>> db.related_table_1.workspace = auth.user.workspace
>> db.related_table_2._common_filter = lambda query: 
>> db.related_table_2.workspace = auth.user.workspace
>> db.related_table_3._common_filter = lambda query: 
>> db.related_table_3.workspace = auth.user.workspace
>> db.related_table_4._common_filter = lambda query: 
>> db.related_table_4.workspace = auth.user.workspace
>> ...etc...
>
>
> Make sense?
>
> Anyone else out there that's done this and can show a better way?  
>
> -Jim
>
>
> NOTE - you might also skip the common filters if you're logging in as an 
> admin.  Then you might want to see data for all workspaces
>
> NOTE 2 - If you really want people to specify their workspace when they 
> login (meaning they have access to all of them but they choose which one on 
> login) then you'd have to override the default login code to gather that 
> extra variable and store it in your session somewhere.  Then use that 
> instead of auth.user.workspace when building your filters.
>
>
>
> On Wed, Oct 17, 2018 at 2:06 AM Rahul > 
> wrote:
>
>> Hi Jim,
>>   I am afraid no I didn't check that section but I just finished 
>> reading it. Thanks! for directing me to it. Looks like a new addition to 
>> DAL (might be a couple of versions back) & looks promising. So now, we can 
>> specify something like request_tenant using db._common_fields  field 
>> parameter. 
>>
>> I would need it for all tables so is there a specific syntax like below 
>> that I am required to specify in each table I create ?
>>
>> db._common_fields.append(Field('request_tenant',
>>default=request.env.http_host,
>>writable=False))
>>
>>
>> Also, can we set the default value to a field value that we can query or 
>> pass as a session variable like session.workspace == 'some workspace name'  
>> while the user logs in ? 
>>
>> default=session.workspace,
>>
>>
>> If yes - what do I need to modify to add this additional field in Auth so 
>> it will be an input field for the user to key in the workspace name. Then I 
>> can store this workspace in session variable and use it. The reason is I 
>> want a group of users (accessing the same app and database from different 
>> locations) belonging to same workspace.  This is how they are grouped. 
>> please see the screenshot posted from my actual application login. In it I 
>> use workspace name as well to validate but after reading the book seems 
>> like we would not require workspace for validation if we can have the user 
>> provide the field for redirection and for us to grab the session variable. 
>>
>> Or is this not needed at all after we use common fields ?  
>>
>> I hope I am clear and make sense  :-) 
>>
>> Regards,
>>
>> Rahul
>>
>>
>>
>>
>>
>> On Tuesday, October 16, 2018 at 7:49:49 PM UTC+5:30, Jim S wrote:
>>>
>>> Have you looked at common filters?
>>>
>>>
>>> http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer?search=common+filter#Common-filters
>>>
>>> -Jim
>>>
>>> On Tuesday, October 16, 2018 at 7:35:04 AM UTC-5, Rahul wrote:

 Hey Everyone,
Greetings! I have a question. I went through Auth documentation 
 and understood that we can add extra fields to the Auth tables. However, I 
 still want to be a little more clear to achieve below - I am currently 
 using three fields for a multi-tenant system like workspace, username and 
 password. Here workspace depicts where the user belongs to (see 
 explanation 
 in Q1 below) I am currently using my own code to manage this stuff 
 manually 
 (almost everything that auth does), now though I want to give Auth a try 
 and tailor it to fit my needs. I dont want to maintain that amount of code 
 and use the existing API. Can I get help on achieving that in the simplest 
 way. If it works, I would switch to using Auth 

 * Q1]* How can we use Auth to add one more extra field for 
 authentication when I want a system to 

Re: [web2py] Re: Auth question

2018-10-17 Thread Jim Steil
Rahul

First, what I was referring to was common_filters, not common fields.  Here
is the scenario as I see it.

In you auth_user table you have a workspace field.  Then in other tables
that are workspace-specific you also have a workspace field to show which
workspace they relate to

Here is how I think I would handle it, assuming I am understanding your
need.  And, assuming that the workspace identifier is stored on the user
record.  You wouldn't gather it on the login page.

In db.py I'd have code that would check to see if the user is logged in.
If so, then set the common filters for the workspace-specific tables

if auth.is_logged_in:
> db.related_table_1._common_filter = lambda query:
> db.related_table_1.workspace = auth.user.workspace
> db.related_table_2._common_filter = lambda query:
> db.related_table_2.workspace = auth.user.workspace
> db.related_table_3._common_filter = lambda query:
> db.related_table_3.workspace = auth.user.workspace
> db.related_table_4._common_filter = lambda query:
> db.related_table_4.workspace = auth.user.workspace
> ...etc...


Make sense?

Anyone else out there that's done this and can show a better way?

-Jim


NOTE - you might also skip the common filters if you're logging in as an
admin.  Then you might want to see data for all workspaces

NOTE 2 - If you really want people to specify their workspace when they
login (meaning they have access to all of them but they choose which one on
login) then you'd have to override the default login code to gather that
extra variable and store it in your session somewhere.  Then use that
instead of auth.user.workspace when building your filters.



On Wed, Oct 17, 2018 at 2:06 AM Rahul  wrote:

> Hi Jim,
>   I am afraid no I didn't check that section but I just finished
> reading it. Thanks! for directing me to it. Looks like a new addition to
> DAL (might be a couple of versions back) & looks promising. So now, we can
> specify something like request_tenant using db._common_fields  field
> parameter.
>
> I would need it for all tables so is there a specific syntax like below
> that I am required to specify in each table I create ?
>
> db._common_fields.append(Field('request_tenant',
>default=request.env.http_host,
>writable=False))
>
>
> Also, can we set the default value to a field value that we can query or
> pass as a session variable like session.workspace == 'some workspace name'
> while the user logs in ?
>
> default=session.workspace,
>
>
> If yes - what do I need to modify to add this additional field in Auth so
> it will be an input field for the user to key in the workspace name. Then I
> can store this workspace in session variable and use it. The reason is I
> want a group of users (accessing the same app and database from different
> locations) belonging to same workspace.  This is how they are grouped.
> please see the screenshot posted from my actual application login. In it I
> use workspace name as well to validate but after reading the book seems
> like we would not require workspace for validation if we can have the user
> provide the field for redirection and for us to grab the session variable.
>
> Or is this not needed at all after we use common fields ?
>
> I hope I am clear and make sense  :-)
>
> Regards,
>
> Rahul
>
>
>
>
>
> On Tuesday, October 16, 2018 at 7:49:49 PM UTC+5:30, Jim S wrote:
>>
>> Have you looked at common filters?
>>
>>
>> http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer?search=common+filter#Common-filters
>>
>> -Jim
>>
>> On Tuesday, October 16, 2018 at 7:35:04 AM UTC-5, Rahul wrote:
>>>
>>> Hey Everyone,
>>>Greetings! I have a question. I went through Auth documentation
>>> and understood that we can add extra fields to the Auth tables. However, I
>>> still want to be a little more clear to achieve below - I am currently
>>> using three fields for a multi-tenant system like workspace, username and
>>> password. Here workspace depicts where the user belongs to (see explanation
>>> in Q1 below) I am currently using my own code to manage this stuff manually
>>> (almost everything that auth does), now though I want to give Auth a try
>>> and tailor it to fit my needs. I dont want to maintain that amount of code
>>> and use the existing API. Can I get help on achieving that in the simplest
>>> way. If it works, I would switch to using Auth
>>>
>>> * Q1]* How can we use Auth to add one more extra field for
>>> authentication when I want a system to validate login based on three
>>> parameters like - Validation needs to be done based on all three parameters
>>> specified. For each application I can use 'n' number of unique workspaces
>>> and 'n' number of users would belong to these workspaces. How to do this ?
>>>
>>>1. *workspace *- An alpha numeric field that would store a unique
>>>name denoting users belonging to a particular set   (For example users

[web2py] Re: Auth question

2018-10-17 Thread Rahul
Hi Jim,
  I am afraid no I didn't check that section but I just finished 
reading it. Thanks! for directing me to it. Looks like a new addition to 
DAL (might be a couple of versions back) & looks promising. So now, we can 
specify something like request_tenant using db._common_fields  field 
parameter. 

I would need it for all tables so is there a specific syntax like below 
that I am required to specify in each table I create ?

db._common_fields.append(Field('request_tenant',
   default=request.env.http_host,
   writable=False))


Also, can we set the default value to a field value that we can query or 
pass as a session variable like session.workspace == 'some workspace name'  
while the user logs in ? 

default=session.workspace,


If yes - what do I need to modify to add this additional field in Auth so 
it will be an input field for the user to key in the workspace name. Then I 
can store this workspace in session variable and use it. The reason is I 
want a group of users (accessing the same app and database from different 
locations) belonging to same workspace.  This is how they are grouped. 
please see the screenshot posted from my actual application login. In it I 
use workspace name as well to validate but after reading the book seems 
like we would not require workspace for validation if we can have the user 
provide the field for redirection and for us to grab the session variable. 

Or is this not needed at all after we use common fields ?  

I hope I am clear and make sense  :-) 

Regards,

Rahul





On Tuesday, October 16, 2018 at 7:49:49 PM UTC+5:30, Jim S wrote:
>
> Have you looked at common filters?
>
>
> http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer?search=common+filter#Common-filters
>
> -Jim
>
> On Tuesday, October 16, 2018 at 7:35:04 AM UTC-5, Rahul wrote:
>>
>> Hey Everyone,
>>Greetings! I have a question. I went through Auth documentation 
>> and understood that we can add extra fields to the Auth tables. However, I 
>> still want to be a little more clear to achieve below - I am currently 
>> using three fields for a multi-tenant system like workspace, username and 
>> password. Here workspace depicts where the user belongs to (see explanation 
>> in Q1 below) I am currently using my own code to manage this stuff manually 
>> (almost everything that auth does), now though I want to give Auth a try 
>> and tailor it to fit my needs. I dont want to maintain that amount of code 
>> and use the existing API. Can I get help on achieving that in the simplest 
>> way. If it works, I would switch to using Auth 
>>
>> * Q1]* How can we use Auth to add one more extra field for 
>> authentication when I want a system to validate login based on three 
>> parameters like - Validation needs to be done based on all three parameters 
>> specified. For each application I can use 'n' number of unique workspaces 
>> and 'n' number of users would belong to these workspaces. How to do this ?
>>
>>1. *workspace *- An alpha numeric field that would store a unique 
>>name denoting users belonging to a particular set   (For example users 
>>working in a specific  location like los-angeles or washington)  or an 
>>office location like michigan, nevada or Zones like north, south  .. 
>>sort-of etc. )
>>2. *username *- Its available already 
>>3. *password *- Its available already
>>
>>
>> *Q2]* Which all tables need to be modified ? 
>>
>> *Q3] *Any changes in any other code in any files ? 
>>
>> I know I can clone my app multiple times and support multi-tenancy 
>> however, if this can be achieved with Auth - that would be great. 
>>
>> Regards,
>>
>> *Rahul *
>>
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[web2py] Re: Auth question

2018-10-16 Thread Jim S
Have you looked at common filters?

http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer?search=common+filter#Common-filters

-Jim

On Tuesday, October 16, 2018 at 7:35:04 AM UTC-5, Rahul wrote:
>
> Hey Everyone,
>Greetings! I have a question. I went through Auth documentation and 
> understood that we can add extra fields to the Auth tables. However, I 
> still want to be a little more clear to achieve below - I am currently 
> using three fields for a multi-tenant system like workspace, username and 
> password. Here workspace depicts where the user belongs to (see explanation 
> in Q1 below) I am currently using my own code to manage this stuff manually 
> (almost everything that auth does), now though I want to give Auth a try 
> and tailor it to fit my needs. I dont want to maintain that amount of code 
> and use the existing API. Can I get help on achieving that in the simplest 
> way. If it works, I would switch to using Auth 
>
> * Q1]* How can we use Auth to add one more extra field for authentication 
> when I want a system to validate login based on three parameters like - 
> Validation needs to be done based on all three parameters specified. For 
> each application I can use 'n' number of unique workspaces and 'n' number 
> of users would belong to these workspaces. How to do this ?
>
>1. *workspace *- An alpha numeric field that would store a unique name 
>denoting users belonging to a particular set   (For example users working 
>in a specific  location like los-angeles or washington)  or an office 
>location like michigan, nevada or Zones like north, south  .. sort-of etc. 
> )
>2. *username *- Its available already 
>3. *password *- Its available already
>
>
> *Q2]* Which all tables need to be modified ? 
>
> *Q3] *Any changes in any other code in any files ? 
>
> I know I can clone my app multiple times and support multi-tenancy 
> however, if this can be achieved with Auth - that would be great. 
>
> Regards,
>
> *Rahul *
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.