user/manage, thanks Anthony

This commit is contained in:
Massimo
2013-05-31 11:25:56 -05:00
parent 0850cadfdc
commit 3ce3171dff
4 changed files with 60 additions and 3 deletions
+1 -1
View File
@@ -1 +1 @@
Version 2.4.7-stable+timestamp.2013.05.31.10.40.23
Version 2.4.7-stable+timestamp.2013.05.31.11.25.20
+3 -1
View File
@@ -31,12 +31,14 @@ def user():
http://..../[app]/default/user/profile
http://..../[app]/default/user/retrieve_password
http://..../[app]/default/user/change_password
http://..../[app]/default/user/manage_users (requires membership in
use @auth.requires_login()
@auth.requires_membership('group name')
@auth.requires_permission('read','table name',record_id)
to decorate functions that need access control
"""
return dict(form=auth())
auth.settings.manager_group_id=1
return auth() if request.extension=='load' else dict(form=auth())
@cache.action()
@@ -1,4 +1,23 @@
{{extend 'layout.html'}}
{{if request.args(0) == 'manage':}}
<h2>{{=T('Manage Access Control')}}</h2>
<ul class="nav nav-tabs">
<li class="active"><a href="#users" data-toggle="tab">Users</a></li>
<li><a href="#roles" data-toggle="tab">Roles</a></li>
<li><a href="#permissions" data-toggle="tab">Permissions</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="users">
{{=LOAD(f='user.load', args=[request.args(0), auth.settings.table_user_name], ajax=True, user_signature=True)}}
</div>
<div class="tab-pane" id="roles">
{{=LOAD(f='user.load', args=[request.args(0), auth.settings.table_group_name], ajax=True, user_signature=True)}}
</div>
<div class="tab-pane" id="permissions">
{{=LOAD(f='user.load', args=[request.args(0), auth.settings.table_permission_name], ajax=True, user_signature=True)}}
</div>
</div>
{{else:}}
<h2>{{=T( request.args(0).replace('_',' ').capitalize() )}}</h2>
<div id="web2py_user_form">
{{
@@ -21,3 +40,4 @@ jQuery("#web2py_user_form input:visible:enabled:first").focus();
web2py_validate_entropy(jQuery('#no_table_new_password'),100);
{{pass}}
//--></script>
{{pass}}
+36 -1
View File
@@ -878,6 +878,7 @@ class Auth(object):
alternate_requires_registration=False,
create_user_groups="user_%(id)s",
everybody_group_id=None,
manager_group_id=None,
login_captcha=None,
register_captcha=None,
retrieve_username_captcha=None,
@@ -1278,7 +1279,7 @@ class Auth(object):
'retrieve_username', 'retrieve_password',
'reset_password', 'request_reset_password',
'change_password', 'profile', 'groups',
'impersonate', 'not_authorized'):
'impersonate', 'not_authorized','manage'):
if len(request.args) >= 2 and args[0] == 'impersonate':
return getattr(self, args[0])(request.args[1])
else:
@@ -2935,6 +2936,40 @@ class Auth(object):
return SQLFORM.factory(Field('user_id', 'integer'))
return SQLFORM(table_user, user.id, readonly=True)
def manage(self):
T = current.T
request = current.request
db = self.db
tablename = request.args(1)
if not self.has_membership(self.settings.manager_group_id):
# not URL.verify(request, user_signature=True, hash_vars=False):
raise HTTP(403)
if not tablename or not tablename in db.tables:
return ''
table = db[tablename]
formname = '%s_grid' % tablename
if tablename == self.settings.table_user_name:
self.settings.table_user._plural = T('Users')
self.settings.table_membership._plural = T('Roles')
self.settings.table_membership._id.readable = False
self.settings.table_membership.user_id.label = T('User')
self.settings.table_membership.group_id.label = T('Role')
grid = SQLFORM.smartgrid(
table, args=request.args[:2],
user_signature=True,
linked_tables=[self.settings.table_membership_name],
maxtextlength=1000, formname=formname)
else:
table._id.readable = False
self.settings.table_permission.group_id.label = T('Role')
self.settings.table_permission.name.label = T('Permission')
orderby = 'role' if tablename == self.settings.table_group_name \
else 'group_id'
grid = SQLFORM.grid(
table, args=request.args[:2], orderby=table[orderby],
user_signature=True, maxtextlength=1000, formname=formname)
return grid
def update_groups(self):
if not self.user:
return