mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
More merging
This commit is contained in:
@@ -461,6 +461,7 @@ class Admin( BaseController ):
|
||||
galaxy.model.GroupDatasetAssociation.table.c.permitted_actions ] )
|
||||
for row2 in q2.execute():
|
||||
total_datasets = row2.total_datasets
|
||||
libraries = []
|
||||
permitted_actions = []
|
||||
# There may not yet be any GroupDatasetAssociations, in which case no
|
||||
# actions will be found
|
||||
@@ -468,16 +469,42 @@ class Admin( BaseController ):
|
||||
for action in row2.permitted_actions:
|
||||
permitted_actions.append( action.encode( 'ascii' ) )
|
||||
permitted_actions.sort()
|
||||
# If we have permitted actions, then we have at least 1 GroupDatasetAssociation, in
|
||||
# which case, we can see if we have any Libraries that the user can access
|
||||
libs = trans.app.model.Library.select()
|
||||
for library in libs:
|
||||
folder = library.root_folder
|
||||
components = list( folder.folders ) + list( folder.datasets )
|
||||
for component in components:
|
||||
if self.renderable( trans, component, row2.group_id ):
|
||||
libraries.append( library.id )
|
||||
break
|
||||
groups.append( ( row.group_id,
|
||||
escape( row.group_name, entities ),
|
||||
row.group_priority,
|
||||
row2.total_datasets,
|
||||
permitted_actions ) )
|
||||
permitted_actions,
|
||||
libraries ) )
|
||||
return trans.fill_template( '/admin/dataset_security/specified_users_groups.mako',
|
||||
user_id=user_id,
|
||||
user_email=escape( user_email, entities ),
|
||||
groups=groups,
|
||||
groups=groups,
|
||||
msg=msg )
|
||||
@web.expose
|
||||
def specified_users_group_libraries( self, trans, **kwd ):
|
||||
if not self.user_is_admin( trans ):
|
||||
return trans.show_error_message( no_privilege_msg )
|
||||
params = util.Params( kwd )
|
||||
msg = params.msg
|
||||
library_ids = params.library_ids.split( ',' )
|
||||
libraries = []
|
||||
for id in library_ids:
|
||||
library = trans.app.model.Library.get( id )
|
||||
libraries.append( library )
|
||||
return trans.fill_template( '/admin/library/specified_users_group_libraries.mako',
|
||||
user_email=params.user_email,
|
||||
group_name=params.group_name,
|
||||
libraries=libraries )
|
||||
|
||||
# Galaxy Library Stuff
|
||||
@web.expose
|
||||
@@ -794,3 +821,28 @@ class Admin( BaseController ):
|
||||
err=None )
|
||||
else:
|
||||
return trans.show_error_message( "Invalid dataset specified" )
|
||||
def renderable( self, trans, component, group_id ):
|
||||
render = False
|
||||
if isinstance( component, trans.app.model.LibraryFolder ):
|
||||
# Check the folder's datasets to see what can be rendered
|
||||
for library_folder_dataset_assoc in component.datasets:
|
||||
if render:
|
||||
break
|
||||
dataset = trans.app.model.Dataset.get( library_folder_dataset_assoc.dataset_id )
|
||||
for group_dataset_assoc in dataset.groups:
|
||||
if group_dataset_assoc.group_id == group_id:
|
||||
render = True
|
||||
break
|
||||
# Check the folder's sub-folders to see what can be rendered
|
||||
if not render:
|
||||
for library_folder in component.folders:
|
||||
self.renderable( trans, library_folder, group_id )
|
||||
elif isinstance( component, trans.app.model.LibraryFolderDatasetAssociation ):
|
||||
render = False
|
||||
dataset = trans.app.model.Dataset.get( component.dataset_id )
|
||||
for group_dataset_assoc in dataset.groups:
|
||||
if group_dataset_assoc.group_id == group_id:
|
||||
render = True
|
||||
break
|
||||
return render
|
||||
|
||||
|
||||
@@ -33,64 +33,46 @@ class Library( BaseController ):
|
||||
group_ids.append( user_group_assoc.group_id )
|
||||
library = trans.app.model.Library.get( library_id )
|
||||
return trans.fill_template( '/library/library.mako', library=library, group_ids=group_ids )
|
||||
if user:
|
||||
# Only display libraries that contain datasets associated with the user's groups
|
||||
group_ids = []
|
||||
for user_group_assoc in user.groups:
|
||||
group = trans.app.model.Group.get( user_group_assoc.group_id )
|
||||
group_ids.append( group.id )
|
||||
else:
|
||||
if user:
|
||||
# Only display libraries that contain datasets associated with the user's groups
|
||||
group_ids = []
|
||||
for user_group_assoc in user.groups:
|
||||
group = trans.app.model.Group.get( user_group_assoc.group_id )
|
||||
group_ids.append( group.id )
|
||||
else:
|
||||
# Only display libraries that contain datasets associated with the public group
|
||||
group_ids = [ trans.app.model.Group.select_by( name='public' )[0].id ]
|
||||
libs = trans.app.model.Library.select()
|
||||
for library in libs:
|
||||
user_can_access = False
|
||||
# Check for public datasets in the Library's root folder
|
||||
for library_folder_dataset_assoc in library.root_folder.datasets:
|
||||
if user_can_access:
|
||||
folder = library.root_folder
|
||||
components = list( folder.folders ) + list( folder.datasets )
|
||||
for component in components:
|
||||
if self.renderable( trans, component, group_ids ):
|
||||
libraries.append( library )
|
||||
break
|
||||
dataset = trans.app.model.Dataset.get( library_folder_dataset_assoc.dataset_id )
|
||||
for group_dataset_assoc in dataset.groups:
|
||||
if group_dataset_assoc.group_id in group_ids:
|
||||
libraries.append( library )
|
||||
user_can_access = True
|
||||
break
|
||||
for folder in library.root_folder.folders:
|
||||
if user_can_access:
|
||||
break
|
||||
for library_folder_dataset_assoc in folder.datasets:
|
||||
if user_can_access:
|
||||
break
|
||||
dataset = trans.app.model.Dataset.get( library_folder_dataset_assoc.dataset_id )
|
||||
for group_dataset_assoc in dataset.groups:
|
||||
if group_dataset_assoc.group_id in group_ids:
|
||||
libraries.append( library )
|
||||
user_can_access = True
|
||||
break
|
||||
else:
|
||||
# Only display libraries that contain datasets associated with the public group
|
||||
group_ids = [ trans.app.model.Group.select_by( name='public' )[0].id ]
|
||||
libs = trans.app.model.Library.select()
|
||||
for library in libs:
|
||||
public_library = False
|
||||
# Check for public datasets in the Library's root folder
|
||||
for library_folder_dataset_assoc in library.root_folder.datasets:
|
||||
if public_library:
|
||||
break
|
||||
dataset = trans.app.model.Dataset.get( library_folder_dataset_assoc.dataset_id )
|
||||
for group_dataset_assoc in dataset.groups:
|
||||
if group_dataset_assoc.group_id in group_ids:
|
||||
libraries.append( library )
|
||||
public_library = True
|
||||
break
|
||||
# Check for public datasets in the root folder's sub-folders
|
||||
for folder in library.root_folder.folders:
|
||||
if public_library:
|
||||
break
|
||||
for library_folder_dataset_assoc in folder.datasets:
|
||||
if public_library:
|
||||
break
|
||||
dataset = trans.app.model.Dataset.get( library_folder_dataset_assoc.dataset_id )
|
||||
for group_dataset_assoc in dataset.groups:
|
||||
if group_dataset_assoc.group_id in group_ids:
|
||||
libraries.append( library )
|
||||
public_library = True
|
||||
break
|
||||
return trans.fill_template( '/library/libraries.mako', group_ids=group_ids, libraries=libraries )
|
||||
def renderable( self, trans, component, group_ids ):
|
||||
render = False
|
||||
if isinstance( component, trans.app.model.LibraryFolder ):
|
||||
# Check the folder's datasets to see what can be rendered
|
||||
for library_folder_dataset_assoc in component.datasets:
|
||||
if render:
|
||||
break
|
||||
dataset = trans.app.model.Dataset.get( library_folder_dataset_assoc.dataset_id )
|
||||
for group_dataset_assoc in dataset.groups:
|
||||
if group_dataset_assoc.group_id in group_ids:
|
||||
render = True
|
||||
break
|
||||
# Check the folder's sub-folders to see what can be rendered
|
||||
if not render:
|
||||
for library_folder in component.folders:
|
||||
self.renderable( trans, library_folder, group_ids )
|
||||
elif isinstance( component, trans.app.model.LibraryFolderDatasetAssociation ):
|
||||
render = False
|
||||
dataset = trans.app.model.Dataset.get( component.dataset_id )
|
||||
for group_dataset_assoc in dataset.groups:
|
||||
if group_dataset_assoc.group_id in group_ids:
|
||||
render = True
|
||||
break
|
||||
return render
|
||||
|
||||
@@ -17,20 +17,27 @@
|
||||
<h3 align="center">Groups of which '${email}' is a member</h3>
|
||||
<table align="center" class="colored">
|
||||
%if msg:
|
||||
<tr><td colspan="4"><p class="ok_bgr">${msg}</p></td></tr>
|
||||
<tr><td colspan="5"><p class="ok_bgr">${msg}</p></td></tr>
|
||||
%endif
|
||||
%if len( groups ) == 0:
|
||||
<tr><td colspan="4">User '${email}' belongs to no groups</td></tr>
|
||||
<tr><td colspan="5">User '${email}' belongs to no groups</td></tr>
|
||||
%else:
|
||||
<tr class="header">
|
||||
<td>Group</td>
|
||||
<td>Priority</td>
|
||||
<td>Datasets</td>
|
||||
<td>Permitted Actions on Datasets</td>
|
||||
<td>Containing Libraries</td>
|
||||
</tr>
|
||||
<% ctr = 0 %>
|
||||
%for group in groups:
|
||||
<% gn = unescape( group[1], unentities ) %>
|
||||
<%
|
||||
gn = unescape( group[1], unentities )
|
||||
library_ids = ''
|
||||
for library_id in group[5]:
|
||||
library_ids += "%s," % library_id
|
||||
library_ids = library_ids.rstrip( ',' )
|
||||
%>
|
||||
%if ctr % 2 == 1:
|
||||
<tr class="odd_row">
|
||||
%else:
|
||||
@@ -48,9 +55,16 @@
|
||||
${da}<br/>
|
||||
%endfor
|
||||
</td>
|
||||
<td>
|
||||
%if len( group[5] ) > 0:
|
||||
<a href="${h.url_for( controller='admin', action='specified_users_group_libraries', user_email=user_email, group_name=group[1], library_ids=library_ids )}">${len( group[5] )}</a>
|
||||
%else:
|
||||
${len( group[5] )}
|
||||
%endif
|
||||
</td>
|
||||
</tr>
|
||||
<% ctr += 1 %>
|
||||
%endfor
|
||||
%endfor
|
||||
%endif
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
<%inherit file="/base.mako"/>
|
||||
|
||||
<%
|
||||
from galaxy.web.controllers.admin import entities, unentities
|
||||
from xml.sax.saxutils import escape, unescape
|
||||
%>
|
||||
|
||||
<%def name="title()">Specified Users Group Libraries{</%def>
|
||||
<%
|
||||
gn = unescape( group_name, unentities )
|
||||
email = unescape( user_email, unentities )
|
||||
%>
|
||||
<div class="toolForm">
|
||||
<div class="form-row">
|
||||
<a href="${h.url_for( controller='admin', action='libraries' )}">Libraries</a> |
|
||||
<a href="${h.url_for( controller='admin', action='groups' )}">Groups</a> |
|
||||
<a href="${h.url_for( controller='admin', action='users' )}">Users</a>
|
||||
</div>
|
||||
<div class="toolFormTitle">Libraries containing datasets associated with group '${gn}' that user '${email}' can access</div>
|
||||
<div class="toolFormBody">
|
||||
%for library in libraries:
|
||||
<div class="form-row">
|
||||
<a href="${h.url_for( controller='admin', action='library', id=library.id )}">${library.name}</a>
|
||||
</div>
|
||||
%endfor
|
||||
</div>
|
||||
</div>
|
||||
@@ -13,7 +13,6 @@
|
||||
if group_dataset_assoc.group_id in group_ids:
|
||||
render = True
|
||||
break
|
||||
# TODO: Do we need to upgrade sqlalchemy? The following shouldn't be necessary if the mappers work correctly.
|
||||
# Check the folder's sub-folders to see what can be rendered
|
||||
for library_folder in component.folders:
|
||||
render_component( library_folder )
|
||||
|
||||
Reference in New Issue
Block a user