使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器

简介: 从kbmmw 4.4 开始,增加了认证管理器,这个比原来的简单认证提供了更多的功能。细化了很多权限操作。 今天对这一块做个介绍。   要做一个认证管理,大概分为以下5步:        1.  定义你要保护的资源,一般是服务、函数,当然你只要不限麻烦,可以是任何东西;        2.  定义使用者(用户);        3.  定义角色,使用者通过角色与服务器打交道;        4.  定义角色或用户可以访问的资源(授权);        5. 定义认证与登录的限制(本步不是必须的)。

  从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;
begin
     Result:='xaliondatasrv';
end;

{$IFNDEF CPP}class{$ENDIF} function Tquerysrv.GetFlags:TkbmMWServiceFlags;
begin
    
       Result:=[mwsfListed,mwsfRunRequireAuth];
end;

 

服务器端就设置好了。

可以运行,并启动服务。

如果客户端没有加入认证用户名的话,查询就会出错。

表示,由于没有认证,无法访问服务器资源。

因此我们需要在客户端加入用户信息。

 

在查询时输入用户名及密码

procedure TForm2.Button6Click(Sender: TObject);
begin
   kbmMWSimpleClient1.Username:='xalion';
   kbmMWSimpleClient1.Password:='xalion';

  cx.query.Clear;
  cx.Query.Add('sp_tables');
  cx.Open;
end

 现在运行客户端,就可以正常访问了

 

 

继续修改表的内容后,然后reslove, 由于前面的角色没权限,就会出认证错误

 

现在只能使用有编辑权限的用户了。

 

procedure TForm2.Button6Click(Sender: TObject);
begin
   kbmMWSimpleClient1.Username:='yh';
 kbmMWSimpleClient1.Password:='yh';

  cx.query.Clear;
  cx.Query.Add('select * from test');
  cx.Open;
end;

procedure TForm2.Button7Click(Sender: TObject);
begin

   cx.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 还提供了自定义的登录及退出方式,大家可以根据实际情况,自己操作。

总之,有了这个认证管理器后,服务器的安全性进一步加强。

另外也可以利用这个,实现当前客户端的访问情况。

目录
相关文章
|
Web App开发 前端开发 .NET
【ABP框架系列学习】模块系统(4)
原文:【ABP框架系列学习】模块系统(4) 0.引言 ABP提供了构建模块和通过组合模块以创建应用程序的基础设施。一个模块可以依赖于另外一个模块。通常,程序集可以认为是模块。如果创建多个程序集的应用程序,建议为每个程序集创建模块定义。
1540 0
使用delphi 开发多层应用(二十三)KbmMW 的WIB
解释WIB 是什么之前,先回顾以下我们前面的各种服务工作方式。前面的各种服务的工作方式都是请求/应答方式。 客户端发送请求,服务器端根据客户端的请求,返回相应的结果。这种方式是一种顺序式访问,是一种紧耦合的方式。
1000 0
|
Web App开发 前端开发 PHP
Laravel学习笔记(二)Laravel 应用程序的体系结构
  在一切环境就绪了,当然就要开始了解框架了。   站在巨人的肩膀上,学东西会事半功倍。我在网上找到一篇好文章,正好可以让我轻松了解Laravel应用程序的体系结构。因此借来直接用了。   该章节内容翻译自《Architecture of Laravel Applications》,一切版权为原作者,由于原作者写这篇文章时Laravel版本还没有到4.1,一些地方有稍微差别,我会稍作修改。
1651 0
|
Web App开发 JSON 数据库
使用delphi 开发多层应用(二十一)使用XE5 RESTClient 直接访问kbmmw 数据库
delphi XE5 出来了,增加了android 的开发支持,另外增加了一个RESTClient 来支持访问REST 服务器。 这个功能非常强大,可以直接使用非常多的REST 服务器。同时也可以支持访问kbmmw 的web 服务器, 并完美的通过JSON支持使用kbmmw 的JSON 数据格式。
1527 0
|
Android开发 iOS开发 网络架构
使用delphi 开发多层应用(二十) ios通过soap 显示kbmmw服务器上的图片
上一次通过soap,使IOS 访问了kbmmw服务器,今天顺便看能不能与android 共用服务器上的那个 下载图片的功能。首先说一下服务端的的程序,基本上就是前面的代码,没有变化,只是要indy 里面的 base64 编码功能,不再啰嗦,直接代码: function Txalionsrv.
986 0
|
网络架构 iOS开发
使用delphi 开发多层应用(十九) ios通过soap 访问kbmmw服务器
随着delphi XE4 的推出,开始真正意义上支持ios 的开发,由于目前kbmmw 还不完全支持ios 的开发,因此 无法直接使用kbmmw 的客户端访问kbmmw 的服务器(虽然kbmmw 也提供了C 的客户端,可以使用xcode连接 kbmmw的C 客户端来访问kbmmw 服务器,但是功能有限,而且要熟悉xcode),对于急着想在ios 使用kbmmw 服务的同学,可以先使用kbmmw 的webservice 方式访问kbmmw 服务器。
1074 0