在AWTK串口屏中,內(nèi)置用戶管理和權(quán)限控制的模型,無(wú)需編碼即可實(shí)現(xiàn)登錄、登出、修改密碼、權(quán)限控制、創(chuàng)建用戶、刪除用戶等功能,本文介紹一下用戶管理和權(quán)限控制的基本用法。
用戶管理和權(quán)限控制是一個(gè)常用的功能。在工業(yè)軟件中,通常將用戶分為幾種不同的角色,每種角色有不同的權(quán)限,比如管理員、操作員和維護(hù)員等等。在 AWTK 串口屏中,內(nèi)置基本的用戶管理和權(quán)限控制功能,可以滿足常見(jiàn)的需求。開(kāi)發(fā)者不需要編寫(xiě)代碼,設(shè)計(jì)好用戶界面,通過(guò)數(shù)據(jù)和命令綁定規(guī)則,即可實(shí)現(xiàn)用戶和權(quán)限管理功能,比如登錄、登出、修改密碼、權(quán)限控制、創(chuàng)建用戶、刪除用戶等功能。
本文介紹一下 AWTK 串口屏中的用戶管理和權(quán)限控制功能。
1. 出廠默認(rèn)用戶
在下面的數(shù)據(jù)文件中,可以修改出廠默認(rèn)的用戶和密碼。密碼使用 sha256 加密,可以使用在線工具生成。https://emn178.github.io/online-tools/sha256.html
design/default/data/user_manager.csv
比如 demo 中的默認(rèn)用戶是:
admin|0|8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918|管理員(默認(rèn)密碼:admin)
2. 數(shù)據(jù)文件格式
用 CSV 格式的文件存儲(chǔ)用戶名和密碼,每行一個(gè)用戶,每行的格式如下:
- 用戶名??梢允褂弥形?。角色。用來(lái)做實(shí)際的權(quán)限控制,怎么定義就怎么用。比如:0?表示管理員,1 表操作員,2 表示維護(hù)員。密碼。使用 sha256 加密。備注??梢允褂弥形?。
在后面的數(shù)據(jù)綁定中,name 表示用戶名,role 表示角色,password 表示密碼,memo 表示備注。
3. 用戶登錄
3.1 用戶登錄命令
當(dāng)啟用用戶管理時(shí),默認(rèn)模型 (default) 會(huì)提供一個(gè) login 的命令。
login 命令依賴兩個(gè)屬性:
login_username 登錄的用戶名。
login_password 登錄的密碼。
login 命令需要一個(gè)參數(shù),用來(lái)指定登錄成功后跳轉(zhuǎn)的目標(biāo)頁(yè)面。
3.2 數(shù)據(jù)綁定
綁定屬性 | 綁定規(guī)則 | 說(shuō)明 |
v-data:value | {login_username} | 用戶名編輯器 |
v-data:value | {login_password, Mode=OneWayToModel, ToModel=sha256(value)} | 密碼編輯器 |
Mode=OneWayToModel 表示單向綁定,只能從控件到模型,主要是因?yàn)槟P屠锏拿艽a是加密后的哈希值,不能反向綁定到控件。
表示將控件輸入的數(shù)據(jù)使用 sha256 加密后,再賦值給模型。
3.3 命令綁定
綁定屬性 | 綁定規(guī)則 | 說(shuō)明 |
v-on:click | {login, Args=home_page} | 登錄按鈕的點(diǎn)擊事件。home_page 是登錄成功后跳轉(zhuǎn)的頁(yè)面 |
3.4 demo 參考界面
4. 用戶登錄狀態(tài)
4.1 用戶登錄狀態(tài)
用戶登錄成功后,會(huì)在默認(rèn)模型 (default) 中提供兩個(gè)變量:
username 登錄的用戶名。
userrole 登錄的用戶角色。
userrole 是一個(gè)整數(shù),可以通過(guò) userrole 來(lái)控制權(quán)限。
4.2 數(shù)據(jù)綁定
綁定屬性 | 綁定規(guī)則 | 說(shuō)明 |
v-data:value | {username} | 顯示當(dāng)前用名 |
v-data:value | {one_of(‘管理員;工程師;操作員’, userrole)} | 顯示當(dāng)前的角色名 |
4.3 命令綁定
比如,只用管理員才能訪問(wèn)的頁(yè)面,可以通過(guò)下面的命令綁定來(lái)實(shí)現(xiàn):
綁定屬性 | 綁定規(guī)則 | 說(shuō)明 |
v-on:click | {navigate, Args=user_manager, AutoDisable=false} | AutoDisable 一定要設(shè)置為 false,否則不能綁定 enable 屬性 |
v-data:enable | data:enable ? ?{userrole==0} | 當(dāng)前角色為管理員時(shí),才啟用本按鈕 |
比如,只用管理員執(zhí)行某些命令,可以通過(guò)下面的命令綁定來(lái)實(shí)現(xiàn):
綁定屬性 | 綁定規(guī)則 | 說(shuō)明 |
v-on:click | {do_something, Args=xxx, AutoDisable=false} | AutoDisable 一定要設(shè)置為 false,否則不能綁定 enable 屬性 |
v-data:enable | data:enable ? ?{userrole==0} | 當(dāng)前角色為管理員時(shí),才啟用本按鈕 |
4.4 demo 參考界面
管理員界面,全部功能可用。
工程師界面,部分功能可用。
5. 修改密碼
5.1 修改密碼命令
當(dāng)啟用用戶管理時(shí),默認(rèn)模型 (default) 會(huì)提供一個(gè) change_password 的命令。change_password 命令依賴兩個(gè)屬性:
- change_password 修改的密碼。change_confirm_password 確認(rèn)修改的密碼。
change_password 命令不需要參數(shù)。
5.2 數(shù)據(jù)綁定
綁定屬性 | 綁定規(guī)則 | 說(shuō)明 |
v-data:value | {change_password, Mode=OneWayToModel, ToModel=sha256(value)} | 密碼編輯器 |
v-data:value | {change_confirm_password, Mode=OneWayToModel, ToModel=sha256(value)} | 確認(rèn)密碼編輯器 |
5.3 命令綁定
綁定屬性 | 綁定規(guī)則 | 說(shuō)明 |
v-on:click | {change_password, CloseWindow=true} | 確認(rèn)按鈕的點(diǎn)擊事件。 |
5.4 demo 參考界面
6. 用戶管理
前面的模型都是默認(rèn)模型 (default),用戶管理模型是 user_manager。
6.1 用戶管理命令
當(dāng)啟用用戶管理時(shí),用戶管理模型 (user_manager) 會(huì)提供一些命令。
add 添加用戶。
remove 刪除用戶。
edit 編輯用戶。
save 保存用戶。
reload 重新加載用戶。
set_selected 設(shè)置選中的用戶。
6.2 數(shù)據(jù)綁定
綁定屬性 | 綁定規(guī)則 | 說(shuō)明 |
v-data:value | {selected_index} | 選中的用戶索引,在列表項(xiàng)目外使用。 |
v-data:value | {index} | 序數(shù),在列表項(xiàng)內(nèi)使用。 |
v-data:value | {item.name} | 用戶名,在列表項(xiàng)內(nèi)使用。 |
v-data:value | {one_of(‘管理員;工程師;操作員’, item.role)} | 角色,在列表項(xiàng)內(nèi)使用。 |
v-data:value | {item.memo} | 備注,在列表項(xiàng)內(nèi)使用。 |
6.3 命令綁定
綁定屬性 | 綁定規(guī)則 | 說(shuō)明 |
v-on:click | {add} | 添加 按鈕的點(diǎn)擊事件。 |
v-on:click | {edit} | 編輯 按鈕的點(diǎn)擊事件。 |
v-on:click | {save} | 保存 按鈕的點(diǎn)擊事件。 |
v-on:click | {reload} | 重新加載 按鈕的點(diǎn)擊事件。 |
v-on:click | {set_selected} | 列表項(xiàng)的點(diǎn)擊事件。 |
v-on:click | {remove, Args=selected_index, AutoDisable=false} | 刪除按鈕的點(diǎn)擊事件。AutoDisable 一定要設(shè)置為 false,否則不能綁定 enable 屬性。 |
為了不讓用戶刪除管理員用戶,可以設(shè)置刪除按鈕的 enable 屬性。綁定規(guī)則如下:
綁定屬性 | 綁定規(guī)則 | 說(shuō)明 |
v-data:enable | {selected_index!=0} | 當(dāng)前選中的用戶不是管理員時(shí),啟用本按鈕。 |
6.4 demo 參考界面
7. 創(chuàng)建用戶
user_manager 模型提供了一個(gè) add 命令,用來(lái)創(chuàng)建用戶。如果支持創(chuàng)建用戶,需要提供一個(gè)創(chuàng)建用戶的界面,窗口的名字必須是 user_manager_add。
通過(guò) new 參數(shù)可以設(shè)置默認(rèn)數(shù)據(jù)。比如:
user_manager(new=' |1| | |');
7.1 模型
創(chuàng)建用戶的界面有自己的模型,代表當(dāng)前創(chuàng)建的用戶。
它具有下面的屬性:
name 表示 username 用戶名。
role 表示 role 角色。
password 表示 password 密碼。
memo 表示 memo 備注。
它還提供了一個(gè)確認(rèn)增加的命令。
add 命令。
7.2 數(shù)據(jù)綁定
綁定屬性 | 綁定規(guī)則 | 說(shuō)明 |
v-data:value | {name, validator=username} | 用戶名編輯器,內(nèi)置數(shù)據(jù)校驗(yàn)器 username,用于檢查用戶名的有效性(如是否重名) |
v-data:value | {role} | 角色編輯器 |
v-data:value | {password, Mode=OneWayToModel, ToModel=sha256(value)} | 密碼編輯器 |
v-data:value | {memo} | 備注編輯器 |
7.3 命令綁定
綁定屬性 | 綁定規(guī)則 | 說(shuō)明 |
v-on:click | {add, CloseWindow=true} | 確認(rèn)按鈕的點(diǎn)擊事件。 |
7.4 demo 參考界面
8. 編輯用戶
user_manager 模型提供了一個(gè) edit 命令,用來(lái)編輯用戶。如果支持編輯用戶,需要提供一個(gè)編輯用戶的界面,窗口的名字必須是 user_manager_edit。
8.1 模型
編輯用戶的界面有自己的模型,代表當(dāng)前編輯的用戶。它具有下面的屬性:
- name 表示 username 用戶名。role 表示 role 角色。memo 表示 memo 備注。
不需要額外的命令。
8.2 數(shù)據(jù)綁定
綁定屬性 | 綁定規(guī)則 | 說(shuō)明 |
v-data:value | {name} | 用戶名編輯器 |
v-data:value | {role, Trigger=Explicit} | 角色編輯器,為了方便取消,采用顯式更新 |
v-data:value | {memo, Trigger=Explicit} | 備注編輯器,為了方便取消,采用顯式更新 |
8.3 命令綁定
綁定屬性 | 綁定規(guī)則 | 說(shuō)明 |
v-on:click | {nothing, UpdateModel=true, CloseWindow=true} | 確認(rèn)按鈕的點(diǎn)擊事件。 |
v-on:click | {nothing, CloseWindow=true} | 取消按鈕的點(diǎn)擊事件。 |
UpdateModel=true 表示更新模型,CloseWindow=true 表示關(guān)閉窗口。
8.4 demo 參考界面
9. 注意
本項(xiàng)目并沒(méi)有編寫(xiě)界面相關(guān)的代碼,AWStudio 在 src/pages 目錄下生成了一些代碼框架,這些代碼并沒(méi)有用到,可以刪除也可以不用管它,但是不能加入編譯。
實(shí)際開(kāi)發(fā)時(shí),可以參考 demo_user_manager 演示項(xiàng)目,在的它 UI 文件上修改。