From c2339ba124b061da641dd0235e70c5c0d0e7a78f Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Mon, 12 Nov 2012 22:53:27 -0800 Subject: [PATCH] exclude guest when editing user roles --- edbob/pyramid/views/users.py | 38 +++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/edbob/pyramid/views/users.py b/edbob/pyramid/views/users.py index 0ed80c5..a2e201e 100644 --- a/edbob/pyramid/views/users.py +++ b/edbob/pyramid/views/users.py @@ -26,13 +26,14 @@ ``edbob.pyramid.views.users`` -- User Views """ -from webhelpers.html import literal, tags +from webhelpers.html import tags +from webhelpers.html.builder import HTML import formalchemy from formalchemy.fields import SelectFieldRenderer import edbob -from edbob.db.auth import set_user_password +from edbob.db import auth from edbob.pyramid import Session from edbob.pyramid.views import SearchableAlchemyGridView, CrudView @@ -86,22 +87,22 @@ class UsersGrid(SearchableAlchemyGridView): return g -class _RolesFieldRenderer(SelectFieldRenderer): - - def render_readonly(self, **kwargs): - roles = Session.query(edbob.Role) - res = literal('') - return res - - def RolesFieldRenderer(request): - return type('RolesFieldRenderer', (_RolesFieldRenderer,), {'request': request}) + + class RolesFieldRenderer(SelectFieldRenderer): + + def render_readonly(self, **kwargs): + roles = Session.query(edbob.Role) + html = '' + for uuid in self.value: + role = roles.get(uuid) + link = tags.link_to( + role.name, request.route_url('role.read', uuid=role.uuid)) + html += HTML.tag('li', c=link) + html = HTML.tag('ul', c=html) + return html + + return RolesFieldRenderer class RolesField(formalchemy.Field): @@ -117,6 +118,7 @@ class RolesField(formalchemy.Field): def get_options(self): q = Session.query(edbob.Role.name, edbob.Role.uuid) + q = q.filter(edbob.Role.uuid != auth.guest_role(Session()).uuid) q = q.order_by(edbob.Role.name) return q.all() @@ -180,7 +182,7 @@ class PasswordField(formalchemy.Field): if not self.is_readonly(): password = self.renderer.deserialize() if password: - set_user_password(self.model, password) + auth.set_user_password(self.model, password) class UserCrud(CrudView):