Can now optionally create a new group with the same name as a role when creating the role, along with more cleanup on the various users / groups / roles templates.

This commit is contained in:
Greg Von Kuster
2009-04-28 09:44:35 -04:00
parent ffa5fcabfd
commit 9520ca7f51
9 changed files with 74 additions and 102 deletions
+13 -27
View File
@@ -60,6 +60,7 @@ class Admin( BaseController ):
description = util.restore_text( params.description )
in_users = util.listify( params.get( 'in_users', [] ) )
in_groups = util.listify( params.get( 'in_groups', [] ) )
create_group_for_role = params.get( 'create_group_for_role', 'no' )
if not name or not description:
msg = "Enter a valid name and a description"
elif trans.app.model.Role.filter( trans.app.model.Role.table.c.name==name ).first():
@@ -76,7 +77,14 @@ class Admin( BaseController ):
for group in [ trans.app.model.Group.get( x ) for x in in_groups ]:
gra = trans.app.model.GroupRoleAssociation( group, role )
gra.flush()
msg = "Role '%s' has been created with %d associated users and %d associated groups" % ( role.name, len( in_users ), len( in_groups ) )
if create_group_for_role == 'yes':
# Create the group
group = trans.app.model.Group( name=name )
group.flush()
msg = "Group '%s' has been created, and role '%s' has been created with %d associated users and %d associated groups" % \
( group.name, role.name, len( in_users ), len( in_groups ) )
else:
msg = "Role '%s' has been created with %d associated users and %d associated groups" % ( role.name, len( in_users ), len( in_groups ) )
trans.response.send_redirect( web.url_for( controller='admin', action='roles', msg=util.sanitize_text( msg ), messagetype='done' ) )
trans.response.send_redirect( web.url_for( controller='admin', action='create_role', msg=util.sanitize_text( msg ), messagetype='error' ) )
out_users = []
@@ -201,23 +209,12 @@ class Admin( BaseController ):
params = util.Params( kwd )
msg = util.restore_text( params.get( 'msg', '' ) )
messagetype = params.get( 'messagetype', 'done' )
# Build a list of tuples which are roles followed by lists of groups and users
# [ ( role, [ group, group, group ], [ user, user ] ), ( role, [ group, group ], [ user ] ) ]
roles_groups_users = []
roles = trans.app.model.Role.query() \
.filter( trans.app.model.Role.table.c.deleted==True ) \
.order_by( trans.app.model.Role.table.c.name ) \
.all()
for role in roles:
groups = []
for gra in role.groups:
groups.append( trans.app.model.Group.get( gra.group_id ) )
users = []
for ura in role.users:
users.append( trans.app.model.User.get( ura.user_id ) )
roles_groups_users.append( ( role, groups, users ) )
return trans.fill_template( '/admin/dataset_security/deleted_roles.mako',
roles_groups_users=roles_groups_users,
roles=roles,
msg=msg,
messagetype=messagetype )
@web.expose
@@ -398,23 +395,12 @@ class Admin( BaseController ):
params = util.Params( kwd )
msg = util.restore_text( params.get( 'msg', '' ) )
messagetype = params.get( 'messagetype', 'done' )
# Build a list of tuples which are groups followed by lists of members and roles
# [ ( group, [ member, member, member ], [ role, role ] ), ( group, [ member, member ], [ role ] ) ]
groups_members_roles = []
groups = trans.app.model.Group.query() \
.filter( trans.app.model.Group.table.c.deleted==True ) \
.order_by( trans.app.model.Group.table.c.name ) \
.all()
for group in groups:
members = []
for uga in group.members:
members.append( trans.app.model.User.get( uga.user_id ) )
roles = []
for gra in group.roles:
roles.append( trans.app.model.Role.get( gra.role_id ) )
groups_members_roles.append( ( group, members, roles ) )
return trans.fill_template( '/admin/dataset_security/deleted_groups.mako',
groups_members_roles=groups_members_roles,
groups=groups,
msg=msg,
messagetype=messagetype )
@web.expose
@@ -627,8 +613,8 @@ class Admin( BaseController ):
msg = util.restore_text( params.get( 'msg', '' ) )
messagetype = params.get( 'messagetype', 'done' )
users = trans.app.model.User.filter( and_( trans.app.model.User.table.c.deleted==True, trans.app.model.User.table.c.purged==False ) ) \
.order_by( trans.app.model.User.table.c.email ) \
.all()
.order_by( trans.app.model.User.table.c.email ) \
.all()
return trans.fill_template( '/admin/user/deleted_users.mako', users=users, msg=msg, messagetype=messagetype )
@web.expose
@web.require_admin
@@ -2,7 +2,7 @@
<%namespace file="/message.mako" import="render_msg" />
## Render a row
<%def name="render_row( group, members, roles, ctr, anchored, curr_anchor )">
<%def name="render_row( group, ctr, anchored, curr_anchor )">
%if ctr % 2 == 1:
<tr class="odd_row">
%else:
@@ -17,18 +17,10 @@
</div>
</td>
<td>
<ul>
%for user in members:
<li>${user.email}</li>
%endfor
</ul>
${len( group.members )}
</td>
<td>
<ul>
%for role in roles:
<li>${role.name}</li>
%endfor
</ul>
${len( group.roles )}
%if not anchored:
<a name="${curr_anchor}"></a>
<div style="float: right;"><a href="#TOP">top</a></div>
@@ -43,12 +35,12 @@
${render_msg( msg, messagetype )}
%endif
%if len( groups_members_roles ) == 0:
%if len( groups ) == 0:
There are no deleted Galaxy groups
%else:
<table class="manage-table colored" border="0" cellspacing="0" cellpadding="0" width="100%">
<%
render_quick_find = len( groups_members_roles ) > 50
render_quick_find = len( groups ) > 50
ctr = 0
%>
%if render_quick_find:
@@ -69,34 +61,29 @@
%endif
<tr class="header">
<td>Name</td>
<td>Members</td>
<td>Users</td>
<td>Roles</td>
</tr>
%for ctr, group_tuple in enumerate( groups_members_roles ):
<%
group = group_tuple[0]
members = group_tuple[1]
roles = group_tuple[2]
%>
%for ctr, group in enumerate( groups ):
%if render_quick_find and not group.name.upper().startswith( curr_anchor ):
<% anchored = False %>
%endif
%if render_quick_find and group.name.upper().startswith( curr_anchor ):
%if not anchored:
${render_row( group, members, roles, ctr, anchored, curr_anchor )}
${render_row( group, ctr, anchored, curr_anchor )}
<% anchored = True %>
%else:
${render_row( group, members, roles, ctr, anchored, curr_anchor )}
${render_row( group, ctr, anchored, curr_anchor )}
%endif
%elif render_quick_find:
%for anchor in anchors[ anchor_loc: ]:
%if group.name.upper().startswith( anchor ):
%if not anchored:
<% curr_anchor = anchor %>
${render_row( group, members, roles, ctr, anchored, curr_anchor )}
${render_row( group, ctr, anchored, curr_anchor )}
<% anchored = True %>
%else:
${render_row( group, members, roles, ctr, anchored, curr_anchor )}
${render_row( group, ctr, anchored, curr_anchor )}
%endif
<%
anchor_loc = anchors.index( anchor )
@@ -105,7 +92,7 @@
%endif
%endfor
%else:
${render_row( group, members, roles, ctr, True, '' )}
${render_row( group, ctr, True, '' )}
%endif
%endfor
</table>
@@ -2,7 +2,7 @@
<%namespace file="/message.mako" import="render_msg" />
## Render a row
<%def name="render_row( role, groups, users, ctr, anchored, curr_anchor )">
<%def name="render_row( role, ctr, anchored, curr_anchor )">
%if ctr % 2 == 1:
<tr class="odd_row">
%else:
@@ -16,19 +16,13 @@
<a class="action-button" href="${h.url_for( action='purge_role', role_id=role.id )}">Purge</a>
</div>
</td>
<td>${role.description}</td>
<td>${role.type}</td>
<td>
<ul>
%for group in groups:
<li>${group.name}</li>
%endfor
</ul>
${len( role.users )}
</td>
<td>
<ul>
%for user in users:
<li>${user.email}</li>
%endfor
</ul>
${len( role.groups )}
%if not anchored:
<a name="${curr_anchor}"></a>
<div style="float: right;"><a href="#TOP">top</a></div>
@@ -43,12 +37,12 @@
${render_msg( msg, messagetype )}
%endif
%if len( roles_groups_users ) == 0:
%if len( roles ) == 0:
There are no deleted Galaxy roles
%else:
<table class="manage-table colored" border="0" cellspacing="0" cellpadding="0" width="100%">
<%
render_quick_find = len( roles_groups_users ) > 50
render_quick_find = len( roles ) > 50
ctr = 0
%>
%if render_quick_find:
@@ -69,34 +63,31 @@
%endif
<tr class="header">
<td>Name</td>
<td>Associated Groups</td>
<td>Associated Users</td>
<td>Description</td>
<td>Type</td>
<td>Users</td>
<td>Groups</td>
</tr>
%for ctr, role_tuple in enumerate( roles_groups_users ):
<%
role = role_tuple[0]
groups = role_tuple[1]
users = role_tuple[2]
%>
%for ctr, role in enumerate( roles ):
%if render_quick_find and not role.name.upper().startswith( curr_anchor ):
<% anchored = False %>
%endif
%if render_quick_find and role.name.upper().startswith( curr_anchor ):
%if not anchored:
${render_row( role, groups, users, ctr, anchored, curr_anchor )}
${render_row( role, ctr, anchored, curr_anchor )}
<% anchored = True %>
%else:
${render_row( role, groups, users, ctr, anchored, curr_anchor )}
${render_row( role, ctr, anchored, curr_anchor )}
%endif
%elif render_quick_find:
%for anchor in anchors[ anchor_loc: ]:
%if role.name.upper().startswith( anchor ):
%if not anchored:
<% curr_anchor = anchor %>
${render_row( role, groups, users, ctr, anchored, curr_anchor )}
${render_row( role, ctr, anchored, curr_anchor )}
<% anchored = True %>
%else:
${render_row( role, groups, users, ctr, anchored, curr_anchor )}
${render_row( role, ctr, anchored, curr_anchor )}
%endif
<%
anchor_loc = anchors.index( anchor )
@@ -105,7 +96,7 @@
%endif
%endfor
%else:
${render_row( role, groups, users, ctr, True, '' )}
${render_row( role, ctr, True, '' )}
%endif
%endfor
</table>
+4 -4
View File
@@ -53,24 +53,24 @@ $().ready(function() {
<form name="associate_group_role_user" id="associate_group_role_user" action="${h.url_for( action='group', group_id=group.id )}" method="post" >
<div class="form-row">
<div style="float: left; margin-right: 10px;">
Roles associated with '${group.name}'<br/>
<label>Roles associated with '${group.name}'</label>
${render_select( "in_roles", in_roles )}<br/>
<input type="submit" id="roles_remove_button" value=">>"/>
</div>
<div>
Roles not associated with '${group.name}'<br/>
<label>Roles not associated with '${group.name}'</label>
${render_select( "out_roles", out_roles )}<br/>
<input type="submit" id="roles_add_button" value="<<"/>
</div>
</div>
<div class="form-row">
<div style="float: left; margin-right: 10px;">
Users associated with '${group.name}'<br/>
<label>Users associated with '${group.name}'</label>
${render_select( "in_users", in_users )}<br/>
<input type="submit" id="users_remove_button" value=">>"/>
</div>
<div>
Users not associated with '${group.name}'<br/>
<label>Users not associated with '${group.name}'</label>
${render_select( "out_users", out_users )}<br/>
<input type="submit" id="users_add_button" value="<<"/>
</div>
@@ -52,28 +52,29 @@ $().ready(function() {
<div class="toolFormBody">
<form name="associate_group_role_user" id="associate_group_role_user" action="${h.url_for( action='create_group' )}" method="post" >
<div class="form-row">
Name: <input name="name" type="textfield" value="" size=40"/>
<label>Name:</label>
<input name="name" type="textfield" value="" size=40"/>
</div>
<div class="form-row">
<div style="float: left; margin-right: 10px;">
Groups associated with new role<br/>
<label>Groups associated with new role</label>
${render_select( "in_roles", in_roles )}<br/>
<input type="submit" id="roles_remove_button" value=">>"/>
</div>
<div>
Groups not associated with new role<br/>
<label>Groups not associated with new role</label>
${render_select( "out_roles", out_roles )}<br/>
<input type="submit" id="roles_add_button" value="<<"/>
</div>
</div>
<div class="form-row">
<div style="float: left; margin-right: 10px;">
Users associated with new role<br/>
<label>Users associated with new role</label>
${render_select( "in_users", in_users )}<br/>
<input type="submit" id="users_remove_button" value=">>"/>
</div>
<div>
Users not associated with new role<br/>
<label>Users not associated with new role</label>
${render_select( "out_users", out_users )}<br/>
<input type="submit" id="users_add_button" value="<<"/>
</div>
+4 -4
View File
@@ -53,24 +53,24 @@ $().ready(function() {
<form name="associate_role_user_group" id="associate_role_user_group" action="${h.url_for( action='role', role_id=role.id )}" method="post" >
<div class="form-row">
<div style="float: left; margin-right: 10px;">
Users associated with '${role.name}'<br/>
<label>Users associated with '${role.name}'</label>
${render_select( "in_users", in_users )}<br/>
<input type="submit" id="users_remove_button" value=">>"/>
</div>
<div>
Users not associated with '${role.name}'<br/>
<label>Users not associated with '${role.name}'</label>
${render_select( "out_users", out_users )}<br/>
<input type="submit" id="users_add_button" value="<<"/>
</div>
</div>
<div class="form-row">
<div style="float: left; margin-right: 10px;">
Groups associated with '${role.name}'<br/>
<label>Groups associated with '${role.name}'</label>
${render_select( "in_groups", in_groups )}<br/>
<input type="submit" id="groups_remove_button" value=">>"/>
</div>
<div>
Groups not associated with '${role.name}'<br/>
<label>Groups not associated with '${role.name}'</label>
${render_select( "out_groups", out_groups )}<br/>
<input type="submit" id="groups_add_button" value="<<"/>
</div>
@@ -52,33 +52,40 @@ $().ready(function() {
<div class="toolFormBody">
<form name="associate_role_group_user" id="associate_role_group_user" action="${h.url_for( action='create_role' )}" method="post" >
<div class="form-row">
Name: <input name="name" type="textfield" value="" size=40"/>
Description: <input name="description" type="textfield" value="" size=40"/>
<label>Name:</label>
<input name="name" type="textfield" value="" size=40"/>
</div>
<div class="form-row">
<label>Description:</label>
<input name="description" type="textfield" value="" size=40"/>
</div>
<div class="form-row">
<div style="float: left; margin-right: 10px;">
Groups associated with new role<br/>
<label>Groups associated with new role</label>
${render_select( "in_groups", in_groups )}<br/>
<input type="submit" id="groups_remove_button" value=">>"/>
</div>
<div>
Groups not associated with new role<br/>
<label>Groups not associated with new role</label>
${render_select( "out_groups", out_groups )}<br/>
<input type="submit" id="groups_add_button" value="<<"/>
</div>
</div>
<div class="form-row">
<div style="float: left; margin-right: 10px;">
Users associated with new role<br/>
<label>Users associated with new role</label>
${render_select( "in_users", in_users )}<br/>
<input type="submit" id="users_remove_button" value=">>"/>
</div>
<div>
Users not associated with new role<br/>
<label>Users not associated with new role</label>
${render_select( "out_users", out_users )}<br/>
<input type="submit" id="users_add_button" value="<<"/>
</div>
</div>
<div class="form-row">
<input type="checkbox" name="create_group_for_role" value="yes" />Create a new group of the same name for this role
</div>
<div class="form-row">
<input type="submit" name="create_role_button" value="Save"/>
</div>
+4 -4
View File
@@ -53,24 +53,24 @@ $().ready(function() {
<form name="associate_user_role_group" id="associate_user_role_group" action="${h.url_for( action='user', user_id=user.id )}" method="post" >
<div class="form-row">
<div style="float: left; margin-right: 10px;">
Roles associated with '${user.email}'<br/>
<label>Roles associated with '${user.email}'</label>
${render_select( "in_roles", in_roles )}<br/>
<input type="submit" id="roles_remove_button" value=">>"/>
</div>
<div>
Roles not associated with '${user.email}'<br/>
<label>Roles not associated with '${user.email}'</label>
${render_select( "out_roles", out_roles )}<br/>
<input type="submit" id="roles_add_button" value="<<"/>
</div>
</div>
<div class="form-row">
<div style="float: left; margin-right: 10px;">
Groups associated with '${user.email}'<br/>
<label>Groups associated with '${user.email}'</label>
${render_select( "in_groups", in_groups )}<br/>
<input type="submit" id="groups_remove_button" value=">>"/>
</div>
<div>
Groups not associated with '${user.email}'<br/>
<label>Groups not associated with '${user.email}'</label>
${render_select( "out_groups", out_groups )}<br/>
<input type="submit" id="groups_add_button" value="<<"/>
</div>
+1 -1
View File
@@ -6,7 +6,7 @@
%endif
<div class="toolForm">
<div class="toolFormTitle">Create account</div>
<div class="toolFormTitle">Create user account</div>
<div class="toolFormBody">
<form name="form" action="${h.url_for( controller='admin', action='create_new_user' )}" method="post" >
<div class="form-row">