HTTPS SSH

Read Files with Permissions(閱讀具權限控管的文件)

本專案乃提供一個彈性設定使用者閱讀多重來源文件的權限設定工具。 文件來源可以是 AWS S3 ,或是一個有 HTTP Basic Authentication 的網站。 而權限設定可以是針對單一使用者,或是某一群組,而目標文件可以依路徑設定權限。 像是: s3://example/a/b.html(可閱讀)、s3://example/b/.*(可閱讀)。

目前可產生文件的工具眾多,像是 Sphinx、Python-Markdown、pydoc、..., 而它們的最終輸出格式,多可選用 .html 。當輸出成 html 文件時, 固然可以直接以瀏覽器觀看,但若這些 html 文件未置入一個網站伺服器上, 要分享給別人瀏覽的話,就只能選擇壓縮它們再傳檔出去,接受者解完壓縮後再用瀏覽器閱讀。

所以 https://readthedocs.org/ 提供 Sphinx 文章的自動編譯及 hosting 的業務, 讓我們可以寫完 .rst 文件後,自動發佈到 http://*.readthedocs.io/ 的網址去。 然其有兩項限制,一是若文件所在的儲存庫為私密儲存庫時, 必須 付費使用 <https://readthedocs.com/pricing/_ 。 二是使用者數量有限制,且權限設定不夠彈性。

專案應用情境

電子商務網站的線上使用者手冊可供幾種角色閱讀:

  1. 主管理者(公司負責人、資訊經理)
  2. 商品管理者(會計人員、會計經理、業務人員、業務經理)
  3. 訂單管理者(會計人員、會計經理、業務人員、業務經理)
  4. 客戶管理者(業務人員、業務經理)
  5. 帳務管理者(會計經理)
  6. 物流管理者(倉管人員)
  7. 消費者

其說明文件(.html)在編寫上,結構如下:

``` #!plain documents /index.html /general /index.html /note_a.html /note_b.html /billing /index.html /note.html /accounting /index.html /note_1.html /note_2.html /product /index.html /class_1.html /class_2.html /class_3.html /class_a.html /order /index.html /type_a.html /type_b.html /service /index.html /user.html /delivery /index.html /delivery.html /consumer /index.html /shopping.html

所以在權限控制上,應設定如下:

```#!plain
主管理者: /.*
資訊經理: /.*
商品管理者: /general/.*, /product/.*, /consumer/.*
訂單管理者: /general/.*, /order/.*, /delivery/.*, /consumer/.*
客戶管理者: /general/.*, /service/.*, /consumer/.*
帳務管理者: /general/.*, /billing/.*, /accounting/.*, /product/.*,
            /order/.*, /delivery/.*, /consumer/.*
物流管理者: /general/.*, /delivery/.*, /consumer/.*
消費者: /consumer/.*

```#!plain 技術說明: 以上權限實現方式,乃使用 django-guardian ,且路徑比對以正規表示式 regex 為之。

使用者點選某一文件網址時,
如: https://readfileswithpermission.com/readfiles/documents/consumer/index.html ,
readfiles 會對應到 views 函式、 documents 對應到文件來源、 
/consumer/index.html 則對應到網址。
整個比對順序,先是拿個人身份,去比對要看的網址是否有允許,比對不到,
才往群組身份去比對是否有允許,皆找不到的情形,就回傳 Deny 。

文件來源設定
-------------------------------------------------------------------------------

目前主要分兩種: AWS S3 及 HTTP 網站。

S3 的設定應包含 bucket key, access_key_id, access_secret_key 。

HTTP 網站的設定應包含 url, username, password 。

而這兩種網站的根目錄,應置有一 __version__.json 文件,格式如下:

```#!json
{
    "name": "Whatever Document",
    "uri": "s3://onetwothree",
    "note": "Whatever Note",
    "changeset": "123456asdf",
    "buildtime": "2017-05-07 12:09:48+08:00"
}

其中的 changeset ,是用來判斷文件外取之用。若無, 則每次使用者瀏覽就不使用快取,而是讀取原始文件。

使用者驗證

首先支援 Django Auth ,使用者可自建帳密、 email ,並須驗證信箱有效, 方完成使用者創建。

之後支援 django-allauth , 使用者可用 Facebook OAUTH2, Google OAUTH2, Yahoo OpenID 登入,並可與原帳號作多重關聯。