WWebPerm

WWebPerm

new WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUser, optopt) → {Object}

Description:
  • 權限伺服器

Source:
Example
import WOrm from 'w-orm-mongodb/src/WOrmMongodb.mjs' //自行選擇引用ORM, 使用Mongodb測試
import WWebPerm from './server/WWebPerm.mjs'
import getSettings from './g.getSettings.mjs'


//st
let st = getSettings()

let url = `mongodb://${st.dbUsername}:${st.dbPassword}@${st.dbIP}:${st.dbPort}` //使用Mongodb測試
let db = st.dbName
let opt = {

    bCheckUser: false,
    getUserById: null,
    bExcludeWhenNotAdmin: false,

    serverPort: 11006,
    subfolder: '', //mperm
    urlRedirect: 'https://www.google.com/', //本機測試時得先編譯, 再瀏覽: http://localhost:11006/

    webName: {
        'eng': 'Permission Service',
        'cht': '權限管理系統',
    },
    webDescription: {
        'eng': 'A web service package for user permissions and management targets.',
        'cht': 'A web service package for user permissions and management targets.',
    },
    webLogo: 'data:image/svg+xml;base64,...',

}

let getUserByToken = async (token) => {
    // return {} //測試無法登入
    if (token === '{token-for-application}') { //提供外部應用系統作為存取使用者
        return {
            id: 'id-for-application',
            name: 'application',
            email: 'application@example.com',
            isAdmin: 'y',
        }
    }
    if (token === 'sys') { //開發階段w-ui-loginout自動給予browser使用者(且位於localhost)的token為sys
        return {
            id: 'id-for-admin',
            name: 'tester',
            email: 'admin@example.com', //mappingBy為email, 開發階段時會使用email找到所建置之使用者資料
            isAdmin: 'y',
        }
    }
    console.log('invalid token', token)
    console.log('於生產環境時得加入SSO等驗證token機制')
    return {}
}

let verifyBrowserUser = (user, caller) => {
    console.log('verifyBrowserUser/user', user)
    // return false //測試無法登入
    console.log('於生產環境時得加入限制瀏覽器使用者身份機制')
    return user.isAdmin === 'y' //測試僅系統管理者使用
}

let verifyAppUser = (user, caller) => {
    console.log('verifyAppUser/user', user)
    // return false //測試無法登入
    console.log('於生產環境時得加入限制應用程式使用者身份機制')
    return user.isAdmin === 'y' //測試僅系統管理者使用
}

//WWebPerm
let instWWebPerm = WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUser, opt)

instWWebPerm.on('error', (err) => {
    console.log(err)
})
Parameters:
Name Type Attributes Default Description
WOrm function

輸入資料庫ORM函數

url String

輸入資料庫連線字串,例如'mongodb://sername:password@$127.0.0.1:27017'

db String

輸入資料庫名稱字串

getUserByToken function

輸入處理函數,函數會傳入使用者token,通過此函數處理後並回傳使用者資訊物件,並至少須提供'id'、'email'、'name'、'isAdmin'欄位,且'isAdmin'限輸入'y'或'n',且輸入'y'時會複寫權限系統該使用者之'isAdmin'欄位值

verifyBrowserUser function

輸入驗證瀏覽使用者身份之處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false

verifyAppUser function

輸入驗證應用程序使用者身份之處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false

opt Object <optional>
{}

輸入設定物件,預設{}

Properties
Name Type Attributes Default Description
serverPort Integer <optional>
11006

輸入伺服器通訊port,預設11006

bCheckUser Boolean <optional>
false

輸入是否檢查使用者資訊布林值,預設false

getUserById function <optional>
null

輸入當bCheckUser=true時依照使用者ID取得使用者資訊物件函數,預設null

bExcludeWhenNotAdmin Boolean <optional>
false

輸入使用ORM的select方法時是否自動刪除數據內isActive欄位之布林值,預設false

webName Object <optional>
{}

輸入站台名稱物件,至少包含語系eng與cht鍵的名稱,預設{}

webDescription Object <optional>
{}

輸入站台描述物件,至少包含語系eng與cht鍵的名稱,預設{}

webLogo String <optional>
''

輸入站台logo字串,採base64格式,預設''

subfolder String <optional>
''

輸入站台所在子目錄字串,提供站台位於內網採反向代理進行服務時,故需支援位於子目錄情形,預設''

urlRedirect String <optional>
''

輸入錯誤時自動轉址字串,提供站台例如無法登入或驗證失敗時須自動轉址,預設''

mappingBy String <optional>
'email'

輸入外部系統識別使用者token後所提供之資料物件,與權限系統之使用者資料物件,兩者間查找之對應欄位,可選'id'、'email'、'name',預設'email'

Returns:

回傳物件,其內server為hapi伺服器實體,wsrv為w-converhp的伺服器事件物件,wsds為w-serv-webdata的伺服器事件物件,可監聽error事件

Type
Object