Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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 "./"
Ejemplo n.º 3
0
    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 "./"
Ejemplo n.º 4
0
    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 "./"
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
 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 "./"
Ejemplo n.º 7
0
 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 "./"
Ejemplo n.º 8
0
 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)
Ejemplo n.º 9
0
 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)
Ejemplo n.º 10
0
    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)
Ejemplo n.º 11
0
    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("../") 
Ejemplo n.º 12
0
 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)
Ejemplo n.º 13
0
    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)
Ejemplo n.º 14
0
    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)
Ejemplo n.º 15
0
    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)
Ejemplo n.º 16
0
    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 "./"
Ejemplo n.º 17
0
    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)
Ejemplo n.º 18
0
    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
                    )
Ejemplo n.º 19
0
 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)
Ejemplo n.º 20
0
    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)