2012-05-24 3 views
-1

У меня есть сайт, в который пользователи входят в систему с использованием проверки подлинности форм, в которой я хочу ограничить доступ к файлам в определенной папке определенным пользователям.Ограничение доступа к файлам определенных пользователей определенным папкам

Так, например, папка dir/foo будет доступна user1, но не user2 или user3 и папки dir/bar будут доступны user2, но не user1 или user3.

Папки, упомянутые выше, не создаются в момент, когда я развертываю сайт. Они создаются на протяжении всего жизненного цикла веб-сайта, и я могу узнать через код (по именам файлов), у кого должен быть доступ к файлам.

Моя настройка такова, что у меня есть некоторые пользователи, у которых есть роли Member. A Member представляет компанию. У каждого Member есть пользователи с ролями Seller, Buyer и Viewer. Теперь каждый пользователь, будь то Member, Seller, Buyer или Viewer, должен иметь возможность видеть документы, принадлежащие его компании. Таким образом, если Seller1 есть документ a.txt то Seller1 должен быть в состоянии увидеть, Member1 должен быть в состоянии видеть его (Member1 является компанией, к которой Seller1 принадлежит), Buyer1 должен быть в состоянии видеть его (принадлежит Member1), Viewer1 должен быть в состоянии его видеть (принадлежит Member1), но Buyer2 не должен его видеть (если он принадлежит Member2). Документы размещаются в папках, имена которых указаны после имени пользователя, которому принадлежит документ. Например, документы, принадлежащие Seller1, находятся в папке с именем Seller1. Кроме того, есть пользователь под названием Admin, который может видеть все документы.

Как это сделать?

+0

repost of [Ограничение доступа к файлам для определенных пользователей] (http://stackoverflow.com/questions/10738673/restricting-file-access-to-certain-users) –

ответ

1

Вы сделали бы это в своем файле web.config. Было бы лучше, если бы вы организовали пользователей в группы, но это можно сделать на потребителе пользователем основе:

<configuration> 
    <system.web> 
     <authorization> 
      <!-- GLOBAL authorization --> 
      <allow users="user1" /> 
      <deny users="user2, user3"/> 
      <allow roles="GoodUsers" /> 
      <deny roles="BadUsers, MouthBreathers"/> 
     </authorization> 
    </system.web> 
    <!-- local individual folder/file authorization 
    <location path="/dir/foo"> 
     <system.web> 
      <authorization> 
       <allow users="user1" /> 
       <deny users="user2, user3"/> 
       <allow roles="GoodUsers" /> 
       <deny roles="BadUsers, MouthBreathers"/> 
      </authorization> 
     </system.web> 
    </location> 
</configuration> 

Edit: Учитывая ваше обновленное описание добавив аспект управления документооборотом и дополнительный фильтр добавив компанию в микс, вы можете сделать несколько способов. Основной метод, который я хотел бы предложить, состоит в том, чтобы иметь все документы вне корневой папки, чтобы они не могли быть просмотрены каким-либо случайным пользователем. Затем создайте интерфейс на основе страниц, который предоставляет возможности поиска. В зависимости от количества папок/документов это можно сделать несколькими способами. Если количество документов меньше для каждой папки (менее 1000 в папке, менее 1000 папок), вы можете легко получить доступ к файловой системе вашей системой напрямую, чтобы обеспечить доступ к чтению этих списков файлов. Если у вас есть больше, чем это, я бы рекомендовал иметь внешний механизм для индексации этих файлов в базу данных, которая легко доступна для поиска. Тогда ваш интерфейс будет отвечать за определение того, кто видит файлы.

Наконец, чтобы обслуживать файлы для пользователя, вы должны создать вторую страницу, чья конкретная ответственность заключается в извлечении определенного файла и его обслуживании в виде двоичного потока.

+0

Но новые пользователи будут созданы на сайте все время. –

+0

@SachinKainth - вот почему я рекомендую использовать группы для пользователей.Таким образом, пользователь просто должен быть добавлен в группу. Я опубликую редактирование, показывающее, как он ограничен группой (ролью). –

+0

Это не так просто. Это долгая вещь для объяснения, но логика должна быть рассмотрена в коде. –

Смежные вопросы