使用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293737.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法分析笔记

2019独角兽企业重金招聘Python工程师标准>>> 定义 定义&#xff1a; 若存在正常数 c 和 n<sub>0</sub> 使得当 N ≥ n<sub>0</sub> 时 T(N) ≤ cf(N)&#xff0c;则记为 T(N) O(f(N))若存在正常数 c 和 n<sub>0</sub> 使得当 …

C++指针详解

C指针详解指针的概念 指针是一个特殊的变量&#xff0c;它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容&#xff1a;指针的类型&#xff0c;指针所指向的类型&#xff0c;指针的值或者叫指针所指向的内存区&#xff0c;还有指针本身所…

数字效率Evernote超效率数字笔记术

文章结束给大家来个程序员笑话&#xff1a;[M] 每日一道理 古人云&#xff1a;“海纳百川&#xff0c;有容乃大。”人世间&#xff0c;不可能没有矛盾和争吵&#xff0c;我们要以磊落的胸怀和宽容的微笑去面对它 。哈伯德也曾说过&#xff1a;“宽恕和受宽恕的难以言喻的快乐&a…

千万别让爸妈帮你P图......

1 如何把外来称呼本土化&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 奇奇怪怪的知识又增加了&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 好家伙&#xff01;洪世贤家烛台上插的是火腿肠▼4 妨碍公务的下场&#xff08;素材来源网络&#xff0c…

WPF 不遮挡任务栏最大化和全屏显示

在窗体不去边框的情况下&#xff0c;不遮挡任务栏最大化MainWindow.xaml.csusing System; using System.Windows; using System.Windows.Threading;namespace thzSoftware {/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWi…

看完后震惊!清华“姚班”创始人的老师究竟有多牛?他说孩子最应该培养这几个思维……...

▲ 点击查看相信很多人都挺听说过清华有个“姚班”&#xff0c;致力于培养与美国麻省理工学院等世界一流高校本科生具有同等、甚至更高竞争力的计算机科学人才。“姚班”是我国著名科学家姚期智所创&#xff0c;因此得名“姚班”。姚期智教授是2000年图灵奖得主&#xff0c;也是…

2021,我在枯燥乏味中寻找坚持下去的理由

这是头哥侃码的第248篇原创2021年&#xff0c;因为疫情和工作变更的关系&#xff0c;不仅我的工作方式被彻底改变&#xff08;居家远程办公&#xff09;&#xff0c;而且还在健身房悟出一个心得体会。啥心得&#xff1f;啥体会&#xff1f;那就是觉得人生逐渐变得没有意思。不知…

OM 延交訂單

如訂單扣數後要延交, 請按以下步驟: 1) 先取消要延交的ITEM 的DELIVERY NO. ACTION: Unassign from Dlivery 2) 要重新給DELIVERY NO ACTION: Auto-create Trip 3) 延交訂單item - Ship confirm - 選backorder all - OK 已完成延交, 可重新取move order

Android之内存机制分析-Android堆和栈

1、dalvik的Heap和Stack 这里说的只是dalvik java部分的内存&#xff0c;实际上除了dalvik部分&#xff0c;还有native。这个以后再说。 下面针对上面列出的数据类型进行说明&#xff0c;只有了解了我们申请的数据在哪里&#xff0c;才能更好掌控我们自己的程序。 2、对象实例…

这部纪录片带你重新认识中华神州大地,领略你不知道的中国

你对自己的祖国熟悉嘛&#xff1f;你是否真正的去了解过自己祖国的各个省份呢&#xff1f;今天小编带来的这部纪录片《你所不知道的中国》&#xff0c;带你认识一个你从未了解的中国&#xff0c;让你从纪录片的视角去认识自己的祖国&#xff0c;重新认识哺育自己多年的神州大地…

B-树特征

在m阶B-树的定义中&#xff0c;要求&#xff1a; 1、树中每个节点至多有m棵子树。 2、若根节点不是叶子节点&#xff0c;则至少有两棵子树。 3、除根之外的所有非终端节点至少有棵子树。转载于:https://www.cnblogs.com/tonglingliangyong/p/3740964.html

首届微软研究峰会视频上线,快来查收你的独家观看指南!

由微软全球八大研究院携手倾力打造的首届微软研究峰会 Microsoft Research Summit 2021 已于此前在线上成功举办。来自世界各地的 300 余位顶尖科学家和技术领导者为大家带来了 150 场精彩分享&#xff0c;内容围绕“科学、赋能、可持续发展、医疗健康、信任”五大主题展开&…

关于用函数指针参数申请动态内存的问题

今天在写一个Binary Search Tree的程序时&#xff0c;发现其插入有问题&#xff0c;下面是插入程序&#xff0c;每次插入完成后&#xff0c;节点还是NULL。 template<typename Object>void CMyTree<Object>::insert(const Object& element, BinaryNode<Obje…

当全家人一起看电影,播到羞羞镜头时......

1 我看你好眼熟哦&#xff08;via.松鼠少儿&#xff0c;侵删&#xff09;▼2 妹妹&#xff1a;有没有想过我感受&#xff1f;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 遇见五步蛇怎么办&#xff08;via.阿森不是妖怪&#xff0c;侵删&#xff09;▼4 一年级…

网站分析常用方法

本篇文章我们介绍4种网站分析中最常用&#xff0c;也是最有效的分析方法。他们分别是细分分析&#xff0c;对比分析&#xff0c;对比分析&#xff0c;质与量分析。这些分析方法在实际工作中经常组合使用。我们先来看下细分分析。 1&#xff0c; 细分分析 单一的指标数据或大维度…

vscode中vue项目报错

当在vscode中写代码时&#xff0c;报错报错报错......... 已经头大&#xff0c;还没写就报错&#xff0c; 这是因为eslint对语法的要求太过严格导致的编译时&#xff0c;出现各种语法格式错误 我们打开vue.config.js&#xff0c;加上这句代码&#xff0c;就OK啦 lintOnSave:…

nginx连接uwsgi使用web.py框架构造pythonweb项目

2019独角兽企业重金招聘Python工程师标准>>> 相关页面&#xff1a;http://webpy.org/installhttp://uwsgi-docs.readthedocs.org/en/latest/WSGIquickstart.htmlhttp://projects.unbit.it/uwsgi/wiki/Example uwsgi的安装需要python-devel&#xff0c;可以使用yum s…

.NET WinForm程序中给DataGridView表头添加下拉列表实现数据过滤

转&#xff1a;http://www.cnblogs.com/jaxu/archive/2011/08/04/2127365.html 我们见过Excel中的数据过滤功能&#xff0c;可以通过点击表头上的下拉列表来实现数据的过滤&#xff0c;这个功能很实用&#xff0c;省去了我们需要在程序中单独设计数据的查询过滤模块&#xff0c…