def put(self, *args, **kw): if "sprox_id" in kw: del kw["sprox_id"] if "repita_nuevo_password" in kw: del kw["repita_nuevo_password"] if kw["nro_documento"]: kw["nro_documento"] = int(kw["nro_documento"]) username = request.identity['repoze.who.userid'] usuario = Usuario.by_user_name(username) id_usuario = UrlParser.parse_id(request.url, "usuarios") if (usuario.id_usuario != id_usuario): pp = PoseePermiso('modificar usuario') if not pp.is_met(request.environ): flash(pp.message % pp.nombre_permiso, 'warning') redirect(self.action) usuario = Usuario.por_id(args[0]) usuario.nombre = kw["nombre"] usuario.apellido = kw["apellido"] usuario.email = kw["email"] usuario.telefono = kw["telefono"] usuario.nro_documento = kw["nro_documento"] if kw["nuevo_password"] != None and kw.has_key('cambiar_pass'): usuario.password = kw["nuevo_password"] redirect("../")
def evaluate(self, environ, credentials): if is_anonymous().is_met(environ): self.unmet() nombre_usuario = credentials["repoze.what.userid"] usuario = Usuario.by_user_name(nombre_usuario) if self.id_usuario: usuario = Usuario.por_id(self.id_usuario) for r in usuario.roles: for p in r.permisos: if p.nombre_permiso.find(u"miembro") >= 0: if self.id_proyecto: if r.tipo == "Proyecto" and \ r.id_proyecto == self.id_proyecto: return elif self.id_fase: if r.tipo == "Fase" and \ r.id_fase == self.id_fase: return else: if r.tipo.find("Tipo") >= 0: ti = TipoItem.por_id(self.id_tipo_item) if ti and ti.es_o_es_hijo(r.id_tipo_item): return #if (r.tipo.find("Tipo") >= 0 and \ # self.id_tipo_item.es_o_es_hijo(r.id_tipo_item)): # r.id_tipo_item == self.id_tipo_item: # return self.unmet(self.message)
def evaluate(self, environ, credentials): if is_anonymous().is_met(environ): self.unmet() nombre_usuario = credentials['repoze.what.userid'] usuario = Usuario.by_user_name(nombre_usuario) if self.id_usuario: usuario = Usuario.por_id(self.id_usuario) if (self.id_tipo_item): #recuperar id de fase y proyecto ti = TipoItem.por_id(self.id_tipo_item) if (not self.id_fase): self.id_fase = ti.id_fase if (not self.id_proyecto): self.id_proyecto = ti.id_proyecto elif (self.id_fase): fase = Fase.por_id(self.id_fase) if (not self.id_proyecto): self.id_proyecto = fase.id_proyecto for r in usuario.roles: tiene = False for p in r.permisos: if p.nombre_permiso == self.nombre_permiso: tiene = True if not tiene: continue if r.es_rol_sistema(): return if self.id_proyecto == r.id_proyecto: if r.tipo == u"Proyecto": return if self.id_fase == r.id_fase: if r.tipo == u"Fase": return ti = TipoItem.por_id(self.id_tipo_item) if ti and ti.es_o_es_hijo(r.id_tipo_item): return self.unmet(self.message % self.nombre_permiso)
def post_buscar(self, *args, **kw): id_fase = UrlParser.parse_id(request.url, "fases") id_usuario = UrlParser.parse_id(request.url, "miembrosfase") usuario = Usuario.por_id(id_usuario) fase = Fase.por_id(id_fase) puede_desasignar = PoseePermiso("asignar-desasignar rol", id_fase=id_fase).is_met( request.environ) titulo = "Roles de: %s" % usuario.nombre_usuario tmpl_context.widget = self.table buscar_table_filler = MiembrosFaseRolesTableFiller(DBSession) buscar_table_filler.filtros = kw usuarios = buscar_table_filler.get_value(usuario=usuario, id_fase=id_fase, **kw) atras = "../../" return dict(lista_elementos=usuarios, page=titulo, titulo=titulo, columnas=self.columnas, opciones=self.opciones, comboboxes=self.comboboxes, url_action="../", atras=atras, puede_desasignar=puede_desasignar)
def post_buscar(self, *args, **kw): id_proyecto = UrlParser.parse_id(request.url, "proyectos") id_usuario = UrlParser.parse_id(request.url, "miembros") usuario = Usuario.por_id(id_usuario) proy = Proyecto.por_id(id_proyecto) puede_desasignar = PoseePermiso("asignar-desasignar rol", id_proyecto=id_proyecto).is_met(request.environ) titulo = "Roles de: %s" % usuario.nombre_usuario tmpl_context.widget = self.table buscar_table_filler = MiembrosProyectoRolesTableFiller(DBSession) buscar_table_filler.filtros = kw usuarios = buscar_table_filler.get_value(usuario=usuario, id_proyecto=id_proyecto, **kw) atras = "/proyectos/%d/miembros/" % id_proyecto return dict(lista_elementos=usuarios, page=titulo, titulo=titulo, columnas=self.columnas, opciones=self.opciones, comboboxes=self.comboboxes, url_action="../", atras=atras, puede_desasignar=puede_desasignar)
def desasignar_roles(self, *args, **kw): """ Desasigna los roles seleccionados a un usuario """ if kw: pks = [] for k, pk in kw.items(): if not k.isalnum(): continue pks.append(int(pk)) transaction.begin() id_user = UrlParser.parse_id(request.url, "miembrosfase") user = Usuario.por_id(id_user) c = 0 while c < len(user.roles): r = user.roles[c] if r.id_rol in pks: if r.nombre_rol == "Miembro de Fase": msg = "No puedes eliminar el rol {nr}. Si deseas " msg += "que el usuario deje de ser miembro, debes " msg += "hacerlo en la pagina de Miembros de la Fase." flash(msg.format(nr=r.nombre_rol), "warning") DBSession.rollback() return "./" del user.roles[c] else: c += 1 transaction.commit() flash("Roles Desasignados correctamente") else: flash("Seleccione por lo menos un rol", "warning") return "./"
def post_buscar(self, *args, **kw): id_proyecto = UrlParser.parse_id(request.url, "proyectos") id_usuario = UrlParser.parse_id(request.url, "miembros") usuario = Usuario.por_id(id_usuario) proy = Proyecto.por_id(id_proyecto) puede_asignar = PoseePermiso("asignar-desasignar rol", id_proyecto=id_proyecto).is_met( request.environ) titulo = u"Roles Desasignados para: %s" % usuario.nombre_usuario tmpl_context.widget = self.table buscar_table_filler = MiembrosProyectoRolesTableFiller(DBSession) buscar_table_filler.filtros = kw roles = buscar_table_filler.get_value(usuario=usuario, asignados=False, id_proyecto=id_proyecto, **kw) atras = "/proyectos/%d/miembros/" % id_proyecto return dict(lista_elementos=roles, page=titulo, titulo=titulo, columnas=self.columnas, opciones=self.opciones, comboboxes=self.comboboxes, url_action="../", atras=atras, puede_asignar=puede_asignar)
def desasignar_roles(self, *args, **kw): """ Desasigna los roles seleccionados a un usuario """ if kw: pks = [] for k, pk in kw.items(): if not k.isalnum(): continue pks.append(int(pk)) transaction.begin() id_user = UrlParser.parse_id(request.url, "usuarios") user = Usuario.por_id(id_user) c = 0 while c < len(user.roles): if user.roles[c].id_rol in pks: r = user.roles[c] if r.nombre_rol == u"Administrador del Sistema" and \ len(r.usuarios) == 1: #verificamos que haya mas de un administrador #del sistema msg = "No puedes eliminar el rol {nr}. Solo existe " msg += "un {nr}, y es usted." flash(msg.format(nr=r.nombre_rol), "warning") return "./" del user.roles[c] else: c += 1 transaction.commit() flash("Roles Desasignados correctamente") return "./"
def _to_python(self, value, state): nro_doc = Usuario.by_nro_documento(value) id_usuario = UrlParser.parse_id(request.url, "usuarios") if nro_doc != None and id_usuario != nro_doc.id_usuario: raise Invalid('Nro de Documento ya existe en sistema', value, state) return value
def asignar_roles(self, *args, **kw): """ Asigna los roles seleccionados a un usuario """ if kw: pks = [] for k, pk in kw.items(): if not k.isalnum(): continue pks.append(int(pk)) transaction.begin() id_user = UrlParser.parse_id(request.url, "nomiembros") id_proyecto = UrlParser.parse_id(request.url, "proyectos") user = Usuario.por_id(id_user) roles = DBSession.query(Rol).filter(Rol.id_rol.in_(pks)).all() for r in roles: if r.tipo.find(u"Plantilla") >= 0: #crear rol a partir de plantilla rol_new = Rol.nuevo_rol_desde_plantilla(plantilla=r, id=id_proyecto) rol_new.usuarios.append(user) else: r.usuarios.append(user) transaction.commit() flash("Roles Asignados correctamente") else: flash("Seleccione por lo menos un rol", "warning") return "./"
def asignar_roles(self, *args, **kw): """ Asigna los roles seleccionados a un usuario """ if kw: pks = [] for k, pk in kw.items(): if not k.isalnum(): continue pks.append(int(pk)) transaction.begin() id_user = UrlParser.parse_id(request.url, "miembros") id_proyecto = UrlParser.parse_id(request.url, "proyectos") user = Usuario.por_id(id_user) roles = DBSession.query(Rol).filter(Rol.id_rol.in_(pks)).all() for r in roles: if r.tipo.find( u"Plantilla") >= 0: #crear rol a partir de plantilla rol_new = Rol.nuevo_rol_desde_plantilla(plantilla=r, id=id_proyecto) rol_new.usuarios.append(user) else: r.usuarios.append(user) transaction.commit() flash("Roles Asignados correctamente") else: flash("Seleccione por lo menos un rol", "warning") return "./"
def post_delete(self, *args, **kw): #se lo llama desde la pagina de edit, al marcar las relaciones #y luego seleccionar Eliminar. Ajax. id_item = UrlParser.parse_id(request.url, "items") item = Item.por_id(id_item) p_item = PropiedadItem.por_id(item.id_propiedad_item) ids = [] id = None if kw: for k, pk in kw.items(): if not k.isalnum(): continue ids.append(int(pk)) else: try: id = int(args[0]) if (id > 0): ids.append(id) except: id = 0 flash(u"Argumento invalido", "warning") p_item.eliminar_relaciones(ids) usuario = Usuario.by_user_name(request.identity['repoze.who.userid']) item.guardar_historial(u"eliminar-relaciones", usuario) if (id): redirect("../") else: transaction.commit() #return "/items/%d/edit" % id_item return './'
def post_buscar(self, *args, **kw): id_fase = UrlParser.parse_id(request.url, "fases") id_usuario = UrlParser.parse_id(request.url, "nomiembrosfase") usuario = Usuario.por_id(id_usuario) fase = Fase.por_id(id_fase) puede_asignar = PoseePermiso("asignar-desasignar rol", id_fase=id_fase).is_met(request.environ) titulo = u"Roles Desasignados para: %s" % usuario.nombre_usuario tmpl_context.widget = self.table buscar_table_filler = MiembrosFaseRolesTableFiller(DBSession) buscar_table_filler.filtros = kw roles = buscar_table_filler.get_value(usuario=usuario, asignados=False, id_fase=id_fase, **kw) atras = "../../" return dict(lista_elementos=roles, page=titulo, titulo=titulo, columnas=self.columnas, opciones=self.opciones, comboboxes=self.comboboxes, url_action="../", atras=atras, puede_asignar=puede_asignar)
def _to_python(self, value, state): emails = Usuario.by_email_address(value) id_usuario = UrlParser.parse_id(request.url, "usuarios") if emails != None and id_usuario != emails.id_usuario: raise Invalid('Email ya existe en sistema', value, state) return value
def get_all(self, *args, **kw): """ Retorna todos los registros Retorna una página HTML si no se especifica JSON """ id_usuario = UrlParser.parse_id(request.url, "usuarios") usuario = Usuario.por_id(id_usuario) puede_asignar = PoseePermiso("asignar-desasignar rol") \ .is_met(request.environ) titulo = "Roles Desasignados de Sistema para: %s" % usuario.nombre_usuario if request.response_type == 'application/json': return self.table_filler.get_value(usuario=usuario, asignados=False, **kw) if not getattr(self.table.__class__, '__retrieves_own_value__', False): roles = self.table_filler.get_value(usuario=usuario, asignados=False, **kw) else: roles = [] tmpl_context.widget = self.table atras = "/usuarios/" return dict(lista_elementos=roles, page=titulo, titulo=titulo, columnas=self.columnas, opciones=self.opciones, url_action=self.action, atras=atras, puede_asignar=puede_asignar)
def perfil(self, *args, **kw): """ Despliega una pagina para modificar el perfil del usuario que inició sesión """ user = request.identity['repoze.who.userid'] usuario = Usuario.by_user_name(user) url = "/usuarios/%d/edit" % usuario.id_usuario redirect(url)
def post_delete(self, id_item): """Elimina un item""" item = Item.por_id(int(id_item)) user = Usuario.by_user_name(request.credentials["repoze.what.userid"]) try: item.eliminar(user) flash(u"Ítem Eliminado") except EliminarItemError, err: flash(unicode(err), 'warning')
def post(self, archivo=None, **kw): id_item = UrlParser.parse_id(request.url, "items") item = Item.por_id(id_item) user = Usuario.by_user_name(request.credentials["repoze.what.userid"]) contenido = archivo.value #archivo.file.read() try: item.adjuntar_archivo(archivo.filename, contenido, user) except AdjuntarArchivoError, err: flash(unicode(err), 'warning')
def post_delete(self, id_archivo): """Elimina un archivo externo""" id_item = UrlParser.parse_id(request.url, "items") item = Item.por_id(id_item) user = Usuario.by_user_name(request.credentials["repoze.what.userid"]) try: item.eliminar_archivo_adjunto(int(id_archivo), user) except EliminarArchivoAdjuntoError, err: flash(unicode(err), 'warning')
def desaprobar(self, *args, **kw): """ Desaprueba un ítem. """ user = Usuario.by_user_name(request.credentials["repoze.what.userid"]) item = Item.por_id(int(args[0])) try: item.desaprobar(user) flash(u"Ítem Desaprobado") except DesAprobarItemError, err: flash(unicode(err), 'warning')
def aprobar(self, *args, **kw): """ Aprueba un ítem. """ item = Item.por_id(int(args[0])) user = Usuario.by_user_name(request.credentials["repoze.what.userid"]) try: item.aprobar(user) flash(u"Ítem Aprobado") except CondicionAprobarError, err: flash(unicode(err), 'warning')
def revivir(self, *args, **kw): """ Revive un ítem que se encuentra en estado eliminado. """ item = Item.por_id(int(args[0])) user = Usuario.by_user_name(request.credentials["repoze.what.userid"]) try: item.revivir(user) flash(u"Ítem Revivido") except RevivirItemError, err: flash(unicode(err), 'warning')
def post(self, *args, **kw): if "sprox_id" in kw: del kw["sprox_id"] id_fase = UrlParser.parse_id(request.url, "fases_desarrollo") id_tipo = int(kw["id_tipo_item"]) user = Usuario.by_user_name(request.credentials["repoze.what.userid"]) del kw["id_tipo_item"] if id_fase: fase = Fase.por_id(id_fase) fase.crear_item(id_tipo, user, **kw) redirect("./")
def _do_get_provider_count_and_objs(self, **kw): """ Se muestra la lista de usuario si se tiene un permiso necesario. Caso contrario se muestra solo su usuario """ if AlgunPermiso(tipo="Usuario").is_met(request.environ): return super(UsuarioTableFiller, self)._do_get_provider_count_and_objs(**kw) username = request.credentials['repoze.what.userid'] user = Usuario.by_user_name(username) return 1, [user]
def relacionar_ph(self, *args, **kw): #recibe los elementos seleccionados en relacionar_item #relaciona, y retorna. Ajax id_item = UrlParser.parse_id(request.url, "items") item = Item.por_id(id_item) p_item = PropiedadItem.por_id(item.id_propiedad_item) ids = [] id = None if kw: for k, pk in kw.items(): if not k.isalnum(): continue ids.append(int(pk)) else: try: id = int(args[0]) if (id > 0): ids.append(id) except: id = 0 flash(u"Argumento inválido", "warning") retorno, creado = p_item.agregar_relaciones(ids, 'p-h') if (creado ): #si por lo menos se pudo crear una relacion se guarda en el #historial usuario = Usuario.by_user_name( request.identity['repoze.who.userid']) item.guardar_historial(u"relacionar-PH", usuario) mensaje = "" if (retorno == u"" and not creado): mensaje = u"No se crearon relaciones" elif (retorno != u""): mensaje = u"No se pudo crear la relación con %s" % retorno #no sé como pasar strings como parámetro, fea solución indice = session.get('indice_mensaje', 0) session['indice_mensaje'] = indice + 1 session[str(indice)] = mensaje if (id): redirect('../mensajes/%d' % indice) else: transaction.commit() #return "/items/%d/edit" % id_item return './mensajes/%d' % indice
def edit(self, *args, **kw): """Despliega una pagina para modificar usuario""" username = request.identity['repoze.who.userid'] usuario = Usuario.by_user_name(username) if usuario.id_usuario != int(args[0]): pp = PoseePermiso('modificar usuario') if not pp.is_met(request.environ): flash(pp.message % pp.nombre_permiso, 'warning') redirect("/usuarios") tmpl_context.widget = self.edit_form user = Usuario.por_id(args[0]) page = "Usuario {nombre}".format(nombre=user.nombre_usuario) atras = "/usuarios/" value = self.edit_filler.get_value(values={'id_usuario': args[0]}) value['_method'] = 'PUT' return dict(value=value, page=page, id=args[0], atras=atras )
def revertir(self, *args, **kw): """ Revierte el ítem en cuestion a la version indicada. """ id_item = UrlParser.parse_id(request.url, "items") id_version = int(args[0]) if not id_item: redirect("../") item = Item.por_id(id_item) pp = PoseePermiso('modificar item', id_tipo_item=item.id_tipo_item) if not pp.is_met(request.environ): flash(pp.message % pp.nombre_permiso, 'warning') redirect("../") user = Usuario.by_user_name(request.credentials["repoze.what.userid"]) item.revertir(id_version, user) redirect("../")
def asignar_roles(self, *args, **kw): """ Asigna los roles seleccionados a un usuario """ if kw: pks = [] for k, pk in kw.items(): if not k.isalnum(): continue pks.append(int(pk)) transaction.begin() id_user = UrlParser.parse_id(request.url, "usuarios") user = Usuario.por_id(id_user) roles = DBSession.query(Rol).filter(Rol.id_rol.in_(pks)).all() for r in roles: r.usuarios.append(user) transaction.commit() flash("Roles Asignados correctamente") return "./"
def enviar_pass(self, **kw): """Recupera el pass enviado por mail uno nuevo.""" usernamegiven = kw["loginusernamegiven"] user = Usuario.by_user_name(usernamegiven) if user != None: smtp_gmail = Gmail() mail = user.email #DEBUG: u"*****@*****.**" hash = hashlib.new('ripemd160') hash.update(user.email + unicode(random.random())) new_pass = hash.hexdigest()[0:15] user._set_password(new_pass) DBSession.add(user) text = _(u"Tu nueva contraseña es : %s") % new_pass smtp_gmail.enviar_mail(mail, text) smtp_gmail.quit() flash(_(u'Nueva contraseña enviada a %s') % mail) redirect(url('/login')) else: flash(_(u'No existe Usuario')) redirect(url('/recuperar_pass'))
def put(self, *args, **kw): """ Actualiza un item. Específicamente su prioridad, complejidad, observaciones o descripcion. """ if "sprox_id" in kw: del kw["sprox_id"] kw["complejidad"] = int(kw["complejidad"]) kw["prioridad"] = int(kw["prioridad"]) atras = "./" id_item = UrlParser.parse_id(request.url, "items") #if UrlParser.parse_nombre(request.url, "fases"): # atras = "../../edit" item = Item.por_id(id_item) user_name = request.credentials["repoze.what.userid"] user = Usuario.by_user_name(user_name) try: item.modificar(user, **kw) except ModificarItemError, err: flash(unicode(err), "warning")
def put(self, *args, **kw): """update""" if "sprox_id" in kw: del kw["sprox_id"] id_item = UrlParser.parse_id(request.url, "items") if UrlParser.parse_nombre(request.url, "versiones"): #No debe poder modificarse, solo visualizar. TODO redirect('../') if id_item: #desde controller de items. id = int(args[0]) #identificador del atributo item = Item.por_id(id_item) p_item = PropiedadItem.por_id(item.id_propiedad_item) valor = kw["valor"] user_name = request.credentials["repoze.what.userid"] user = Usuario.by_user_name(user_name) try: p_item.modificar_atributo(user, id, valor) except ModificarItemError, err: flash(unicode(err), 'warning')
def relacionar_as(self, *args, **kw): #recibe los elementos seleccionados en relacionar_item #relaciona, y retorna. Ajax id_item = UrlParser.parse_id(request.url, "items") item = Item.por_id(id_item) p_item = PropiedadItem.por_id(item.id_propiedad_item) ids = [] id = None if kw: for k, pk in kw.items(): if not k.isalnum(): continue ids.append(int(pk)) else: try: id = int(args[0]) if (id > 0): ids.append(id) except: id = 0 flash(u"Argumento inválido", "warning") p_item.agregar_relaciones(ids, 'a-s') usuario = Usuario.by_user_name(request.identity['repoze.who.userid']) item.guardar_historial(u"relacionar-AS", usuario) mensaje = "" indice = session.get('indice_mensaje', 0) session['indice_mensaje'] = indice + 1 session[str(indice)] = mensaje if (id): redirect('../mensajes/%d' % indice) else: transaction.commit() #return "/items/%d/edit" % id_item return './mensajes/%d' % indice
def post_buscar(self, *args, **kw): id_usuario = UrlParser.parse_id(request.url, "usuarios") usuario = Usuario.por_id(id_usuario) puede_desasignar = PoseePermiso("asignar-desasignar rol") \ .is_met(request.environ) titulo = "Roles de Sistema para: %s" % usuario.nombre_usuario tmpl_context.widget = self.table buscar_table_filler = UsuarioRolesTableFiller(DBSession) buscar_table_filler.filtros = kw usuarios = buscar_table_filler.get_value(usuario=usuario, **kw) atras = "/usuarios/" return dict(lista_elementos=usuarios, page=titulo, titulo=titulo, columnas=self.columnas, opciones=self.opciones, url_action="../", atras=atras, puede_desasignar=puede_desasignar)
def post(self, *args, **kw): """ Generamos la línea base. """ #transaction.begin() id_fase = UrlParser.parse_id(request.url, "fases") pks = [] for k, v in kw.items(): if v.isalnum(): pks.append(int(v)) fase = Fase.por_id(id_fase) user = Usuario.by_user_name(request.credentials["repoze.what.userid"]) fase.generar_lb(pks, user) if pks: flash(u"Se ha generado la línea base") else: flash(u"No se seleccionaron elementos", "warning") transaction.commit() #redirect("/fases/%d/edit" % id_fase) #url = '/fases/%d/edit' % id_fase url = './' return url
def abrir(self, *args, **kw): """ Abre una LB """ lb = LB.por_id(int(args[0])) user = Usuario.by_user_name(request.credentials["repoze.what.userid"]) op = u"Desbloqueo" for iplb in lb.items: p_item = iplb.propiedad_item if p_item.estado == u"Bloqueado": p_item.estado = u"Aprobado" elif p_item.estado == u"Revisión-Bloq": p_item.estado = u"Revisión-Desbloq" HistorialItems.registrar(user, p_item, op) HistorialLB.registrar(user, lb, 0)# u"Apertura" id_fase = UrlParser.parse_id(request.url, "fases") url = '../' fase = Fase.por_id(id_fase) lb.estado = u"Abierta" fase.cambiar_estado() flash("Se ha abierto la LB") redirect(url)
def eliminar_relaciones(self, *args, **kw): #se lo llama desde la pagina de edit, al marcar las relaciones #y luego seleccionar Eliminar. Ajax. id_item = UrlParser.parse_id(request.url, "items") item = Item.por_id(id_item) p_item = PropiedadItem.por_id(item.id_propiedad_item) ids = [] if kw: for k, pk in kw.items(): if not k.isalnum(): continue ids.append(int(pk)) p_item.eliminar_relaciones(ids) usuario = Usuario.by_user_name(request.identity['repoze.who.userid']) item.guardar_historial(u"eliminar-relaciones", usuario) transaction.commit() #return "/items/%d/edit" % id_item return './'
def _to_python(self, value, state): nro_doc = Usuario.by_nro_documento(value) if nro_doc != None: raise Invalid('Nro de Documento ya existe en sistema', value, state) return value
def _to_python(self, value, state): emails = Usuario.by_email_address(value) if emails != None: raise Invalid('Email ya existe en sistema', value, state) return value
def _to_python(self, value, state): usernames = Usuario.by_user_name(value) if usernames != None: raise Invalid('El usuario ya existe en sistema', value, state) return value
def evaluate(self, environ, credentials): if is_anonymous().is_met(environ): self.unmet() nombre_usuario = credentials["repoze.what.userid"] usuario = Usuario.by_user_name(nombre_usuario) if self.id_usuario: usuario = Usuario.por_id(self.id_usuario) if (self.id_tipo_item): #recuperar id de fase y proyecto ti = TipoItem.por_id(self.id_tipo_item) if (not self.id_fase): self.id_fase = ti.id_fase if (not self.id_proyecto): self.id_proyecto = ti.id_proyecto elif (self.id_fase): fase = Fase.por_id(self.id_fase) if (not self.id_proyecto): self.id_proyecto = fase.id_proyecto for r in usuario.roles: if (r.tipo.find(u"Sistema") == 0): for p in r.permisos: if (p.tipo.find(self.tipo) >= 0): return if (r.tipo.find(u"Proyecto") == 0): if (self.tipo == "Proyecto" and self.id_proyecto == r.id_proyecto): return elif (self.tipo == "Fase" or self.tipo == "Tipo"): algun = False for p in r.permisos: if (p.tipo.find(self.tipo) >= 0): algun = True break if (algun and self.id_proyecto == r.id_proyecto): return elif (algun and (self.id_fase + self.id_proyecto +\ self.id_tipo_item == 0)): return elif (r.tipo.find(u"Fase") == 0): if (self.tipo == "Fase"): if (self.id_fase == r.id_fase): return elif (not self.id_fase): fase = Fase.por_id(r.id_fase) if (self.id_proyecto == fase.id_proyecto): return elif (self.tipo == "Tipo"): algun = False for p in r.permisos: if (p.tipo.find(self.tipo) >= 0): algun = True break if (algun and self.id_fase == r.id_fase): return elif (algun and (self.id_fase + self.id_proyecto +\ self.id_tipo_item == 0)): return elif (r.tipo.find(u"Tipo") == 0): if (self.tipo == "Tipo"): if (self.id_tipo_item and ti.es_o_es_hijo(r.id_tipo_item)): return ti = TipoItem.por_id(r.id_tipo_item) if (ti.id_fase == self.id_fase or ti.id_proyecto == self.id_proyecto): return ''' algun = False for p in r.permisos: if p.nombre_permiso.find(u"consultar") < 0 and \ p.tipo.find(self.tipo) >= 0 and \ p.nombre_permiso != "miembro": algun = True break if not algun: continue if (self.id_fase + self.id_proyecto + self.id_tipo_item == 0): return if (r.es_rol_sistema()): return if (self.id_proyecto == r.id_proyecto): if (r.tipo == u"Proyecto"): return if (self.id_fase == r.id_fase): if (r.tipo == u"Fase"): return ti = TipoItem.por_id(self.id_tipo_item) if (ti and ti.es_o_es_hijo(r.id_tipo_item)): return ''' self.unmet(self.message)