exclude guest when editing user roles

This commit is contained in:
Lance Edgar 2012-11-12 22:53:27 -08:00
parent c79d6de56d
commit c2339ba124

View file

@ -26,13 +26,14 @@
``edbob.pyramid.views.users`` -- User Views ``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 import formalchemy
from formalchemy.fields import SelectFieldRenderer from formalchemy.fields import SelectFieldRenderer
import edbob import edbob
from edbob.db.auth import set_user_password from edbob.db import auth
from edbob.pyramid import Session from edbob.pyramid import Session
from edbob.pyramid.views import SearchableAlchemyGridView, CrudView from edbob.pyramid.views import SearchableAlchemyGridView, CrudView
@ -86,22 +87,22 @@ class UsersGrid(SearchableAlchemyGridView):
return g return g
class _RolesFieldRenderer(SelectFieldRenderer):
def render_readonly(self, **kwargs):
roles = Session.query(edbob.Role)
res = literal('<ul>')
for uuid in self.value:
role = roles.get(uuid)
res += literal('<li>%s</li>' % (
tags.link_to(role.name,
self.request.route_url('role.read', uuid=role.uuid))))
res += literal('</ul>')
return res
def RolesFieldRenderer(request): 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): class RolesField(formalchemy.Field):
@ -117,6 +118,7 @@ class RolesField(formalchemy.Field):
def get_options(self): def get_options(self):
q = Session.query(edbob.Role.name, edbob.Role.uuid) 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) q = q.order_by(edbob.Role.name)
return q.all() return q.all()
@ -180,7 +182,7 @@ class PasswordField(formalchemy.Field):
if not self.is_readonly(): if not self.is_readonly():
password = self.renderer.deserialize() password = self.renderer.deserialize()
if password: if password:
set_user_password(self.model, password) auth.set_user_password(self.model, password)
class UserCrud(CrudView): class UserCrud(CrudView):