diff --git a/edbob/pyramid/templates/users/base.mako b/edbob/pyramid/templates/users/base.mako
deleted file mode 100644
index 27f7dd9..0000000
--- a/edbob/pyramid/templates/users/base.mako
+++ /dev/null
@@ -1,2 +0,0 @@
-<%inherit file="/base.mako" />
-${parent.body()}
diff --git a/edbob/pyramid/templates/users/crud.mako b/edbob/pyramid/templates/users/crud.mako
index c9314e9..2e5a70e 100644
--- a/edbob/pyramid/templates/users/crud.mako
+++ b/edbob/pyramid/templates/users/crud.mako
@@ -1,10 +1,12 @@
-<%inherit file="/users/base.mako" />
<%inherit file="/crud.mako" />
-<%def name="crud_name()">User%def>
-
<%def name="context_menu_items()">
-
${h.link_to("Back to Users", url('users.list'))}
+ ${h.link_to("Back to Users", url('users'))}
+ % if form.readonly:
+ ${h.link_to("Edit this User", url('user.update', uuid=form.fieldset.model.uuid))}
+ % elif form.updating:
+ ${h.link_to("View this User", url('user.read', uuid=form.fieldset.model.uuid))}
+ % endif
%def>
${parent.body()}
diff --git a/edbob/pyramid/templates/users/edit.mako b/edbob/pyramid/templates/users/edit.mako
deleted file mode 100644
index 77fd24c..0000000
--- a/edbob/pyramid/templates/users/edit.mako
+++ /dev/null
@@ -1,2 +0,0 @@
-<%inherit file="/users/crud.mako" />
-${parent.body()}
diff --git a/edbob/pyramid/templates/users/index.mako b/edbob/pyramid/templates/users/index.mako
index 493a309..c9f9918 100644
--- a/edbob/pyramid/templates/users/index.mako
+++ b/edbob/pyramid/templates/users/index.mako
@@ -1,10 +1,11 @@
-<%inherit file="/users/base.mako" />
-<%inherit file="/index.mako" />
+<%inherit file="/grid.mako" />
<%def name="title()">Users%def>
<%def name="context_menu_items()">
- ${h.link_to("Create a new User", url('user.new'))}
+ % if request.has_perm('users.create'):
+ ${h.link_to("Create a new User", url('user.create'))}
+ % endif
%def>
${parent.body()}
diff --git a/edbob/pyramid/templates/users/new.mako b/edbob/pyramid/templates/users/new.mako
deleted file mode 100644
index 77fd24c..0000000
--- a/edbob/pyramid/templates/users/new.mako
+++ /dev/null
@@ -1,2 +0,0 @@
-<%inherit file="/users/crud.mako" />
-${parent.body()}
diff --git a/edbob/pyramid/views/users.py b/edbob/pyramid/views/users.py
index be0a611..1ef9500 100644
--- a/edbob/pyramid/views/users.py
+++ b/edbob/pyramid/views/users.py
@@ -34,15 +34,13 @@ from formalchemy.fields import SelectFieldRenderer
import edbob
from edbob.db.auth import set_user_password
from edbob.pyramid import Session
-from edbob.pyramid.views import SearchableAlchemyGridView
-from edbob.pyramid.views.crud import Crud
+from edbob.pyramid.views import SearchableAlchemyGridView, CrudView
class UsersGrid(SearchableAlchemyGridView):
mapped_class = edbob.User
- route_name = 'users'
- route_url = '/users'
+ config_prefix = 'users'
sort = 'username'
def join_map(self):
@@ -76,6 +74,15 @@ class UsersGrid(SearchableAlchemyGridView):
g.person,
],
readonly=True)
+ if self.request.has_perm('users.read'):
+ g.clickable = True
+ g.click_route_name = 'user.read'
+ if self.request.has_perm('users.update'):
+ g.editable = True
+ g.edit_route_name = 'user.update'
+ if self.request.has_perm('users.delete'):
+ g.deletable = True
+ g.delete_route_name = 'user.delete'
return g
@@ -176,10 +183,10 @@ class PasswordField(formalchemy.Field):
set_user_password(self.model, password)
-class UserCrud(Crud):
+class UserCrud(CrudView):
mapped_class = edbob.User
- home_route = 'users.list'
+ home_route = 'users'
def fieldset(self, user):
fs = self.make_fieldset(user)
@@ -213,5 +220,27 @@ class UserCrud(Crud):
def includeme(config):
- UsersGrid.add_route(config)
- UserCrud.add_routes(config)
+
+ config.add_route('users', '/users')
+ config.add_view(UsersGrid, route_name='users',
+ renderer='/users/index.mako',
+ permission='users.list')
+
+ config.add_route('user.create', '/users/new')
+ config.add_view(UserCrud, attr='create', route_name='user.create',
+ renderer='/users/crud.mako',
+ permission='users.create')
+
+ config.add_route('user.read', '/users/{uuid}')
+ config.add_view(UserCrud, attr='read', route_name='user.read',
+ renderer='/users/crud.mako',
+ permission='users.read')
+
+ config.add_route('user.update', '/users/{uuid}/edit')
+ config.add_view(UserCrud, attr='update', route_name='user.update',
+ renderer='/users/crud.mako',
+ permission='users.update')
+
+ config.add_route('user.delete', '/users/{uuid}/delete')
+ config.add_view(UserCrud, attr='delete', route_name='user.delete',
+ permission='users.delete')