[RESOLVIDO] Restrição de Download por Usuário

1 resposta
cle.darsie

Olá pessoal,
Estou com uma duvida que não consigo resolver…

Tenho uma tela web que o usuário acessa para fazer download de arquivos que estão no servidor. Porém, eu queria restringir o download por usuário.
Por exemplo, para o Usuário 1, aparece uma lista de arquivos que ele pode baixar a hora que quiser, porém, o Usuário 2 não pode ver essa lista, e é uma lista diferente, com outros arquivos.
Meu sistema tem autenticação de usuários, uma tela de login, estava pensando como é que eu posso fazer para que cada usuário consiga acessar somente a sua lista de arquivos, e que os outros usuários não consigam vê-las. Alguém tem alguma ideia de como eu posso fazer isso??

Essa tela de download que criei funciona perfeitamente, faz download corretamente.

A minha tela está em VB, mas se tiver alguma ideia em Aspx tbm será bem vinda.
Segue abaixo o código da minha tela de download.

Option Explicit On
Option Strict On

Imports System.IO

Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub btnDownload_ServerClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDownload.ServerClick
        Dim arquivo As FileInfo
        Dim nomeArquivo As String

        'Obtêm o nome compleo do arquivo selecionado
        nomeArquivo = Server.MapPath("arquivos") & "\" & lstArquivos.SelectedItem.Text

        'Obtêm os dados do arquivo pois o tamanho é requerido para efetuar o download
        arquivo = New FileInfo(nomeArquivo)

        'envia para o browser
        Response.Clear()
        Response.AddHeader("Content-Disposition", "attachment; filename=" & lstArquivos.SelectedItem.Text)
        Response.AddHeader("Content-Length", arquivo.Length.ToString())
        Response.ContentType = "application/octet-stream"
        Response.WriteFile(nomeArquivo)
        Response.End()
    End Sub

    Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim arquivos() As String
        Dim index As Integer

        If (Not Page.IsPostBack) Then
            'Obtem a lista de arquivos no diretório imagens
            arquivos = Directory.GetFiles(Server.MapPath("arquivos"))

            'removemos o caminho dos arquivos a serem exibidos
            For index = 0 To arquivos.Length - 1
                arquivos(index) = New FileInfo(arquivos(index)).Name
            Next index

            'vincula a lista dos arquivos ao controle no formulário
            lstArquivos.DataSource = arquivos
            lstArquivos.DataBind()

            'seleciona a primeira entrada da lista
            lstArquivos.SelectedIndex = 0
        End If
    End Sub 'Page_Load
End Class

Obrigado.

1 Resposta

S

Cara não manjo nada de VB, ASP, .NET, porém usando a lógica, não vejo outra forma de controlar isso senão por meio de base de dados (um tabela contendo o id do usuario e a lista de arquivos que ele pode ver) ou por arquivo de configuração (mas nesse caso é um pouco mais espartano, pois cada usuário terá de ter seu arquivo… :?)

Acredito que você criando uma tabelinha contendo essas referências é a melhor coisa, até porque daí pra criar uma tela em que o administrador customize os arquivos para cada usuário é um pulo (o que na verdade seria o processo ideal, pois depois você só faria a leitura da tabela baseada no ID do seu usuário para alimentar a tela).

Espero ter ajudado.

Criado 16 de janeiro de 2012
Ultima resposta 15 de fev. de 2012
Respostas 1
Participantes 2