使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器
? 從kbmmw 4.4 開始,增加了認證管理器,這個比原來的簡單認證提供了更多的功能。細化了很多權限操作。
今天對這一塊做個介紹。
? 要做一個認證管理,大概分為以下5步:
?????? 1.? 定義你要保護的資源,一般是服務、函數,當然你只要不限麻煩,可以是任何東西;
?????? 2.? 定義使用者(用戶);
?????? 3.? 定義角色,使用者通過角色與服務器打交道;
?????? 4.? 定義角色或用戶可以訪問的資源(授權);
?????? 5. 定義認證與登錄的限制(本步不是必須的)。
一般來說,用戶是通過配置文件或數據庫來保存的,這樣可以靈活的設置用戶名與密碼,當然也包括用戶的角色。
? 我們以以前的數據服務為例,做一個認證管理。(本例子工作環境:win7 x64+delphi xe6+kbmmw 4.5 beta1)
首先,在主窗體放一個kbmMWAuthorizationManager1。
如圖
為了方便,設置mwaoautologin. 這樣在客戶端直接使用客戶端的用戶名與密碼登錄。
另外kbmmwserver1 要應用這個認證管理器
同時在注冊完服務器后,按上面的步驟定義資源及角色等。
sd:= kbmMWServer1.RegisterServicebyname('xaliondatasrv',Tquerysrv ,false);editorrole:=kbmMWAuthorizationManager1.AddRole('Editor'); // 定義一個編輯角色readerrole:=kbmMWAuthorizationManager1.AddRole('Reader'); //定義一個讀者角色adminrole:=kbmMWAuthorizationManager1.AddRole('Administrator'); //定義一個超級用戶角色adminrole.SubRoles.Add(readerrole); // 超級用戶 具有編輯與讀者的功能adminrole.SubRoles.Add(editorrole); // 編輯與讀者 是超級用戶的子角色kbmMWAuthorizationManager1.AddActor('xalion','xalion','Reader'); // 定義兩個用戶kbmMWAuthorizationManager1.AddActor('yh','yh','Administrator'); // 這個可以通過數據庫來存儲readerResources:=kbmMWAuthorizationManager1.AddResource('ReaderResources'); // 定義兩個資源editorResources:=kbmMWAuthorizationManager1.AddResource('EditorResources');kbmMWAuthorizationManager1.AddResource('xaliondatasrv.QUERY',readerResources); // 定義資源權限kbmMWAuthorizationManager1.AddResource('xaliondatasrv.DEFINITIONS',readerResources);kbmMWAuthorizationManager1.AddResource('xaliondatasrv.EXECUTE',readerResources);kbmMWAuthorizationManager1.AddResource('xaliondatasrv.INVENTORY',readerResources);kbmMWAuthorizationManager1.AddResource('xaliondatasrv.METADATA',readerResources);kbmMWAuthorizationManager1.AddResource('xaliondatasrv.RESOLVE',editorResources);kbmMWAuthorizationManager1.Grant('','Reader','ReaderResources',[mwapExecute]); // 給角色授權kbmMWAuthorizationManager1.Grant('','Editor','EditorResources',[mwapExecute]);?
最后把數據服務設為需要認證才能訪問。
{$IFNDEF CPP}class{$ENDIF} function Tquerysrv.GetPrefServiceName:string; beginResult:='xaliondatasrv'; end;{$IFNDEF CPP}class{$ENDIF} function Tquerysrv.GetFlags:TkbmMWServiceFlags; beginResult:=[mwsfListed,mwsfRunRequireAuth]; end;?
服務器端就設置好了。
可以運行,并啟動服務。
如果客戶端沒有加入認證用戶名的話,查詢就會出錯。
表示,由于沒有認證,無法訪問服務器資源。
因此我們需要在客戶端加入用戶信息。
?
在查詢時輸入用戶名及密碼
procedure TForm2.Button6Click(Sender: TObject); beginkbmMWSimpleClient1.Username:='xalion';kbmMWSimpleClient1.Password:='xalion';cx.query.Clear;cx.Query.Add('sp_tables');cx.Open; end?現在運行客戶端,就可以正常訪問了
?
?
繼續修改表的內容后,然后reslove, 由于前面的角色沒權限,就會出認證錯誤
?
現在只能使用有編輯權限的用戶了。
?
procedure TForm2.Button6Click(Sender: TObject); beginkbmMWSimpleClient1.Username:='yh';kbmMWSimpleClient1.Password:='yh';cx.query.Clear;cx.Query.Add('select * from test');cx.Open; end;procedure TForm2.Button7Click(Sender: TObject); begincx.Resolve;showmessage('修改成功'); end;?這樣就沒問題了。
基本上就完成了認證管理。
?
如果想了解認證的過程,可以在
里面設置一下,就可以顯示一下的認證過程。
?
GetAuthorization: Attempt authorization for: Actor=YH , Role=ADMINISTRATOR, Resource=XALIONDATASRV.RESOLVE GetAuthorization: Attempt authorization for: Actor=<all>, Role=ADMINISTRATOR, Resource=XALIONDATASRV.RESOLVE GetAuthorization: Attempt authorization for: Actor=YH , Role=<all>, Resource=XALIONDATASRV.RESOLVE GetAuthorization: Attempt authorization for: Actor=<all>, Role=<all>, Resource=XALIONDATASRV.RESOLVE GetAuthorization: Attempt authorization for: Actor=YH , Role=ADMINISTRATOR, Resource=EDITORRESOURCES GetAuthorization: Attempt authorization for: Actor=<all>, Role=ADMINISTRATOR, Resource=EDITORRESOURCES GetAuthorization: Attempt authorization for: Actor=YH , Role=<all>, Resource=EDITORRESOURCES GetAuthorization: Attempt authorization for: Actor=<all>, Role=<all>, Resource=EDITORRESOURCES GetAuthorization: Attempting subrole authorization for: Actor=YH , Role=ADMINISTRATOR, Resource=XALIONDATASRV.RESOLVE GetAuthorization: Attempt authorization for: Actor=YH , Role=READER, Resource=XALIONDATASRV.RESOLVE GetAuthorization: Attempt authorization for: Actor=<all>, Role=READER, Resource=XALIONDATASRV.RESOLVE GetAuthorization: Attempt authorization for: Actor=YH , Role=<all>, Resource=XALIONDATASRV.RESOLVE GetAuthorization: Attempt authorization for: Actor=<all>, Role=<all>, Resource=XALIONDATASRV.RESOLVE GetAuthorization: Attempt authorization for: Actor=YH , Role=READER, Resource=EDITORRESOURCES GetAuthorization: Attempt authorization for: Actor=<all>, Role=READER, Resource=EDITORRESOURCES GetAuthorization: Attempt authorization for: Actor=YH , Role=<all>, Resource=EDITORRESOURCES GetAuthorization: Attempt authorization for: Actor=<all>, Role=<all>, Resource=EDITORRESOURCES GetAuthorization: Unauthorized Actor=YH, Role=READER, Resource=xaliondatasrv.RESOLVE GetAuthorization: Attempt authorization for: Actor=YH , Role=EDITOR, Resource=XALIONDATASRV.RESOLVE GetAuthorization: Attempt authorization for: Actor=<all>, Role=EDITOR, Resource=XALIONDATASRV.RESOLVE GetAuthorization: Attempt authorization for: Actor=YH , Role=<all>, Resource=XALIONDATASRV.RESOLVE GetAuthorization: Attempt authorization for: Actor=<all>, Role=<all>, Resource=XALIONDATASRV.RESOLVE GetAuthorization: Attempt authorization for: Actor=YH , Role=EDITOR, Resource=EDITORRESOURCES GetAuthorization: Attempt authorization for: Actor=<all>, Role=EDITOR, Resource=EDITORRESOURCES?
?
kbmmw 還提供了自定義的登錄及退出方式,大家可以根據實際情況,自己操作。
總之,有了這個認證管理器后,服務器的安全性進一步加強。
另外也可以利用這個,實現當前客戶端的訪問情況。
轉載于:https://www.cnblogs.com/xalion/p/3738603.html
總結
以上是生活随笔為你收集整理的使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android之在view中内嵌浏览器的
- 下一篇: C#中'??'符的使用