項目筆記 - Layui & Nodejs 實現(xiàn)前后端權(quán)限管理

前端網(wǎng)站原型設(shè)計

上個禮拜將公司網(wǎng)站存在的問題梳理了一下,了解其前后端技術(shù)是什么列疗。了解了下軟件開發(fā)流程是如何的滑蚯。


work_flow.jpg

由于Layui開發(fā)前端頁面比較迅速,花了半天時間看了下文檔,然后制作了新的網(wǎng)站原型告材,在此記錄下遇到的一些問題坤次。

  1. Layui 的文件內(nèi)容不能發(fā)生變化,比如文件夾內(nèi)各文件的相對位置斥赋。在部署到服務器上時缰猴,發(fā)現(xiàn)如果修改了文件夾名字或增加了新內(nèi)容,將無法讀出疤剑。
  2. Layui的引用最好加上Media="all" <link rel="stylesheet" media="all" href="../../assets/layui/css/layui.css" />滑绒,如果遇到瀏覽器提示css在嚴格模式下無法解析。
  3. Script 代碼一般寫在Layui.use里面隘膘,模塊的定義通過Layui.define進行定義疑故。
  4. Layui的模板引擎并沒有提供API接口,通過閱讀Layui的模板引擎源碼弯菊,嘗試通過express進行res.render指定laytpl中的方法纵势,結(jié)果出錯。采用MVC架構(gòu)管钳,通過controller控制傳入數(shù)據(jù)钦铁,控制不同頁面的的數(shù)據(jù)顯示并不方便,感覺Layui并不適合MVC開發(fā)才漆。

邊做邊學了ejs模板語言牛曹,ejs關(guān)鍵是不同占位符代表的含義,其可以在模板中定義for, if等醇滥,結(jié)合res.render傳入的數(shù)據(jù)進行條件化渲染黎比。
在使用session的過程中,了解了req.app.locals, req.locals, app.locals的區(qū)別腺办,第一個是保存數(shù)據(jù)到請求連接的作用域中焰手,與第二者的區(qū)別是其數(shù)據(jù)可以供其他中間件調(diào)用糟描,第三個是保存到express 實例的全局作用域怀喉。
此外,了解了redis的用法船响,redis是通過內(nèi)存在保存數(shù)據(jù)躬拢,其相對于直接使用session store,有以下兩個優(yōu)點见间。

  1. redis store因為保存在服務器的內(nèi)存中聊闯,其訪問數(shù)據(jù)很快
  2. 安全性得到了增強,采用普通的session機制米诉,因為設(shè)置的是全局變量菱蔬,會導致多用戶返回相同的session內(nèi)容。而采用redis,每個用戶連接都會在內(nèi)存中單獨創(chuàng)建一對key value拴泌。
后端權(quán)限設(shè)置

一開始對主流的權(quán)限控制方案進行了調(diào)研魏身,如java spring security , shiro, 以及node-acl,這些框架比較重蚪腐,雖然其安全性和可靠性比較高箭昵,功能完善,但考慮目前情況回季,采用了express + mongodb + layui 通過設(shè)置不同的中間件來實現(xiàn)權(quán)限控制家制。其實mongodb不太適合關(guān)系型數(shù)據(jù)庫,其不同數(shù)據(jù)表之間的權(quán)限關(guān)聯(lián)不如使用MySql之類泡一。

主要流程如下

  1. 首先設(shè)計好數(shù)據(jù)庫颤殴,即Model模塊,一般權(quán)限通常是和崗位綁定的瘾杭,所以可以設(shè)置不同部門崗位的權(quán)限诅病,若是需要跨部門,可以給一個人設(shè)置多個職位粥烁。
    這里簡單采取管理員和普通用戶贤笆,數(shù)據(jù)表設(shè)置用戶名和密碼,頁面訪問權(quán)限讨阻,系統(tǒng)設(shè)置權(quán)限芥永;
  2. 封裝設(shè)計好的數(shù)據(jù)庫,添加增刪改查方法钝吮。
  3. 設(shè)置三個中間件埋涧,第一個監(jiān)測用戶是否登錄,若是沒有登錄奇瘦,則跳轉(zhuǎn)到登錄頁面棘催;第二個中間件監(jiān)測登錄的用戶是否有訪問該頁面的權(quán)限;第三個中間件監(jiān)測用戶是否有訪問權(quán)限設(shè)置的權(quán)限耳标。

期間遇到的一些問題醇坝,比如針對權(quán)限樹嵌套如何往內(nèi)部某個子樹添加權(quán)限,Mongodb可以采用addToSet來往現(xiàn)有對象的內(nèi)部對象添加元素次坡。刪除多層嵌套的元素呼猪,可以采用Pull方法。權(quán)限樹采用Layui的帶編輯功能的砸琅,其注意點是為了在后續(xù)獲取特定的元素宋距,需要在add新元素的時候,設(shè)置id症脂。

上線測試

上次遇到一些問題谚赎,比較奇怪的錯誤淫僻,通過排除發(fā)現(xiàn)是Node版本的問題,在寫服務端時使用的是class, module.exports = new Object() 類似面向?qū)ο蟮膶懛ê剑霸诎⒗镌粕习惭b的7.0版本的Node嘁傀,結(jié)果無法解析,通過NVM切換成12.0的可以成功運行视粮。

其他注意事項:

  1. 針對靜態(tài)資源细办,不要忘記設(shè)置靜態(tài)的絕對目錄,可以通過app.use實現(xiàn)蕾殴。
  2. 針對request的解析笑撞,之前看express官方文檔,發(fā)現(xiàn)4.0自帶bodyParser, 但使用了發(fā)現(xiàn)遇到比較多bug, 調(diào)試了較久钓觉,還是采用了主流的bodyParser, urlencoded與json方法的區(qū)別是前者主要是解析post提交的form 表單茴肥,需要注意的是extended需要設(shè)置為true才能解析嵌套的對象,否則只能解析簡單的荡灾。開啟嵌套解析會消耗一定的性能
// parser
app.use(bodyParser.json());
app.use(
  bodyParser.urlencoded({
    extended: true
  })
);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瓤狐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子批幌,更是在濱河造成了極大的恐慌础锐,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荧缘,死亡現(xiàn)場離奇詭異皆警,居然都是意外死亡,警方通過查閱死者的電腦和手機截粗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門信姓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绸罗,你說我怎么就攤上這事意推。” “怎么了珊蟀?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵菊值,是天一觀的道長。 經(jīng)常有香客問我系洛,道長俊性,這世上最難降的妖魔是什么略步? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任描扯,我火速辦了婚禮,結(jié)果婚禮上趟薄,老公的妹妹穿的比我還像新娘绽诚。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布恩够。 她就那樣靜靜地躺著卒落,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蜂桶。 梳的紋絲不亂的頭發(fā)上儡毕,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音扑媚,去河邊找鬼腰湾。 笑死,一個胖子當著我的面吹牛疆股,可吹牛的內(nèi)容都是我干的费坊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼旬痹,長吁一口氣:“原來是場噩夢啊……” “哼附井!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起两残,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤永毅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后人弓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卷雕,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年票从,在試婚紗的時候發(fā)現(xiàn)自己被綠了漫雕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡峰鄙,死狀恐怖浸间,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吟榴,我是刑警寧澤魁蒜,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站吩翻,受9級特大地震影響兜看,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜狭瞎,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一细移、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧熊锭,春花似錦弧轧、人聲如沸雪侥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽速缨。三九已至,卻和暖如春代乃,著一層夾襖步出監(jiān)牢的瞬間旬牲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工搁吓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留引谜,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓擎浴,卻偏偏與公主長得像员咽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贮预,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容