有关集中用户的问题

集中用户应该有一个“所属管理插件”的字段,记录此用户的出处,比如“内部员工”,即由“内部控制台”插件管理。
   那么用户 staff_tommy 的“所属管理插件”的字段值为“InternelWebControlPanel”.
   系统内核插件提供一个扩展点为“UserProvider”
   <extension-point id="UserProvider" name="统一用户提供者" schema="schema/UserProvider.exsd"></extension-point>
   各个需要统一用户管理功能的插件均可扩展这个扩展点,扩展规格是:必须实现以下接口:

 

ExpandedBlockStart.gifContractedBlock.gif/**//// <summary>
InBlock.gif    
/// IUserOpCallBack 统一用户管理的回调操作。
ExpandedBlockEnd.gif    
/// </summary>

None.gif    public interface IUserOpCallBack
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 创建用户,创建完毕后应将具体用户的ID存入ISysUser的ExternId域
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="transaction">事务</param>
InBlock.gif        
/// <param name="userContext">统一用户上下文</param>    
ExpandedSubBlockEnd.gif        
/// <returns>创建状态</returns>

InBlock.gif        IStatus CreateUser(IDbTransaction transaction, ISysUserContext userContext);
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 修改用户
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="transaction">事务</param>
InBlock.gif        
/// <param name="userContext">统一用户上下文</param>
ExpandedSubBlockEnd.gif        
/// <returns>创建状态</returns>

InBlock.gif        IStatus ModifyUser(IDbTransaction transaction, ISysUserContext userContext);
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 删除用户
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="trans">事务</param>
InBlock.gif        
/// <param name="userContext">统一用户上下文</param>
ExpandedSubBlockEnd.gif        
/// <returns></returns>

InBlock.gif        IStatus DeleteUser(IDbTransaction trans, ISysUserContext userContext);
ExpandedBlockEnd.gif    }

 

ExpandedBlockStart.gifContractedBlock.gif/**//// <summary>
InBlock.gif    
/// ISysUserContext 统一用户的上下文。
ExpandedBlockEnd.gif    
/// </summary>

None.gif    public interface ISysUserContext
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 具体的用户对象,如职员
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        object ConcreteUser
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
get ;
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 统一用户对象
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        ISysUser SysUser
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
get ;
ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif    }

 

 

ExpandedBlockStart.gifContractedBlock.gif/**//// <summary>
InBlock.gif    
/// ISysUser 统一用户身份接口。
ExpandedBlockEnd.gif    
/// </summary>

None.gif    public interface ISysUser
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 具体类型的用户的ID
ExpandedSubBlockEnd.gif        
/// </summary>

ExpandedSubBlockStart.gifContractedSubBlock.gif        int ExternId dot.gifgetset; }
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 名
ExpandedSubBlockEnd.gif        
/// </summary>

ExpandedSubBlockStart.gifContractedSubBlock.gif        string SysUser_FirstName dot.gifgetset; }
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 自动编号
ExpandedSubBlockEnd.gif        
/// </summary>

ExpandedSubBlockStart.gifContractedSubBlock.gif        int SysUser_Id dot.gifgetset; }
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 密码
ExpandedSubBlockEnd.gif        
/// </summary>

ExpandedSubBlockStart.gifContractedSubBlock.gif        string SysUser_Password dot.gifgetset; }
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 管理此用户的插件标识
ExpandedSubBlockEnd.gif        
/// </summary>

ExpandedSubBlockStart.gifContractedSubBlock.gif        string SysUser_PluginId dot.gifgetset; }
InBlock.gif        
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 状态
ExpandedSubBlockEnd.gif        
/// </summary>

ExpandedSubBlockStart.gifContractedSubBlock.gif        int SysUser_Status dot.gifgetset; }
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 姓
ExpandedSubBlockEnd.gif        
/// </summary>

ExpandedSubBlockStart.gifContractedSubBlock.gif        string SysUser_SurName dot.gifgetset; }
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 账号
ExpandedSubBlockEnd.gif        
/// </summary>

ExpandedSubBlockStart.gifContractedSubBlock.gif        string SysUser_Userid dot.gifgetset; }
ExpandedBlockEnd.gif    }


用户所属的插件可以理解为用户的域,相同域的用户不能有同名的账号.
统一用户表还应该提供一个 ExternId 的字符型字段, 其值完全由插件系统
去提供,并由其自行理解,可以是一个 int.ToString(),也可以是一个内部编码什么的。

一般来说,管理具体用户的插件都有一个用户表,比如职员表,(不过这个扩展空间很大,谁知道呢,也许是从AD或者LDAP中取得用户,今天还谈了个项目是从别的软件系统中通过WebService取得用户,真是千奇百怪),
当这个插件加入系统的时候,希望不要修改这个表结构,如在此表中加入类似“统一用户ID”这样的字段,因此在统一用户表
中加入这个ExternId字段。

转载于:https://www.cnblogs.com/xiaotaoliang/archive/2006/07/19/455044.html

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

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

相关文章

mobile web retina 下 1px 边框解决方案

http://www.tuicool.com/articles/ZRv6bun 再谈mobile web retina 下 1px 边框解决方案 时间 2015-01-03 12:03:31 Hugo Web前端开发原文 http://www.ghugo.com/css-retina-hairline/主题 WebKit iOS CSS本文实际上想说的是ios8下 1px解决方案。 1px的边框在devicePixelRatio…

LeetCode—55. 跳跃游戏

55. 跳跃游戏 题目描述&#xff1a; 给定一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 考察重点&#xff1a;由前至后遍历数组&#xff0c;maxPos记录我们当…

Rust下载和安装

2019独角兽企业重金招聘Python工程师标准>>> 1、在Linux和Mac上安装Rust&#xff1a; 在Linux和Mac上安装Rust(稳定的二进制)的一个简单的方法&#xff0c;只需要在shell中运行以下命令&#xff1a; $ curl -sSf https://static.rust-lang.org/rustup.sh | sh 一个…

LeetCode—300. 最长递增子序列

300. 最长递增子序列 题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组…

Skype for Business Server 2015-08-反向代理-发布-统一沟通

申明&#xff1a;文章中部分内容有涉及官方帮助或者网上资源整合&#xff0c;如有违权&#xff0c;请速与作者联系&#xff0c;谢谢&#xff01;作者&#xff1a;316191099qq.com培训&#xff1a;Skype for Business Server 2015-项目实战-培训-QQ群:65235615。&#xff08;学员…

架构师小跟班:如何高效又安全的清理Linux服务器上的缓存?

操作服务器上的生产环境&#xff0c;一定要慎之又慎&#xff0c;安全第一&#xff0c;优化第二&#xff01; 一些基本原理 说到清理内存&#xff0c;那么不得不提到/proc这一个虚拟文件系统&#xff0c;这里面的数据和文件都是内存中的实时数据&#xff0c;很多参数的获取都可以…

LeetCode—233. 数字 1 的个数(困难)

233. 数字 1 的个数&#xff08;困难&#xff09; 题目描述&#xff1a; 给定一个整数 n&#xff0c;计算所有小于等于 n 的非负整数中数字 1 出现的个数。 考察重点&#xff1a;分别计算个、十、百…千位上1出现的次数&#xff0c;再求和。 func countDigitOne(n int) int…

JavaScript--fullPage.js插件

GitHub:https://github.com/alvarotrigo/fullPage.js FullPage.js是一个基于JQuery的插件,可以很方便的制作出全屏网站; 一 特点: 1.支持鼠标滚动;2.支持键盘控制前进和后退;3.多个回调函数;4.支持手机/平板触摸事件;5.支持CSS3动画;6.支持窗口缩放,缩放时自动调整;7.jQuery兼…

细细讲述Java技术开发的那些不为人知的规则

本文介绍的Java规则的说明分为3个主要级别&#xff0c;中级是平时开发用的比较多的级别&#xff0c;在今后将陆续写出其他的规则。遵守了这些规则可以提高程序的效率、使代码又更好的可读性等。 一、在finally方法里关掉input或者output资源 方法体里面定义了input或者output流…

LeetCode—301. 删除无效的括号(困难)

301. 删除无效的括号&#xff08;困难&#xff09; 题目描述&#xff1a; 给你一个由若干括号和字母组成的字符串 s &#xff0c;删除最小数量的无效括号&#xff0c;使得输入的字符串有效。 返回所有可能的结果。答案可以按 任意顺序 返回。 考察重点&#xff1a;题目要求找…

LeetCode—56. 合并区间

56. 合并区间 题目描述&#xff1a; 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 考察重点&#x…

[转]软件测试的完整分类

[转]软件测试的完整分类 2015-06-09 转自&#xff1a;软件测试的完整分类 转载于:https://www.cnblogs.com/Ming8006/p/4563994.html

LeetCode—304. 二维区域和检索 - 矩阵不可变

304. 二维区域和检索 - 矩阵不可变 题目描述&#xff1a; 给定一个二维矩阵 matrix&#xff0c;以下类型的多个请求&#xff1a; 计算其子矩形范围内元素的总和&#xff0c;该子矩阵的 左上角 为 (row1, col1) &#xff0c;右下角 为 (row2, col2) 。 实现 NumMatrix 类&…

LeetCode—57. 插入区间

57. 插入区间 题目描述&#xff1a; 给你一个 无重叠的 &#xff0c;按照区间起始端点排序的区间列表。 在列表中插入一个新的区间&#xff0c;你需要确保列表中的区间仍然有序且不重叠&#xff08;如果有必要的话&#xff0c;可以合并区间&#xff09;。 考察重点&#xf…

LeetCode—306. 累加数

306. 累加数 题目描述&#xff1a; 累加数 是一个字符串&#xff0c;组成它的数字可以形成累加序列。 一个有效的 累加序列 必须 至少 包含 3 个数。除了最开始的两个数以外&#xff0c;序列中的每个后续数字必须是它之前两个数字之和。 给你一个只包含数字 ‘0’-‘9’ 的字…

LeetCode—59. 螺旋矩阵 II

59. 螺旋矩阵 II 题目描述&#xff1a; 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 考察重点&#xff1a;way数组记录走的方向&#xff0c;结合DFS实现矩阵螺旋遍历。 int way[][] …

LeetCode—307. 区域和检索 - 数组可修改

307. 区域和检索 - 数组可修改 题目描述&#xff1a; 给你一个数组 nums &#xff0c;请你完成两类查询。 其中一类查询要求 更新 数组 nums 下标对应的值 另一类查询要求返回数组 nums 中索引 left 和索引 right 之间&#xff08; 包含 &#xff09;的nums元素的 和 &#x…

33Exchange Server 2010跨站点部署-分支机构邮件从分支机构出

16.6 SH-ROBIN外网邮件从分部出16.6.1 创建SH-ROBIN发送连接器在上海分支机构的集线器上创建一个发送连接器SH-To Internet添加地址空间&#xff0c;并设定成本添加上海分支机构的两台HT创建好上海分支机构的发送连接器16.6.2 SH-ROBIN站的TOM发送邮件给公网CONTOSOCONTOSO的张…

我的设计模式之旅(4)——生成器(建造者)模式Builder

Builder模式也是创建型模式中的一种。主要用来应对构成复杂但构成结构和顺序相对稳定的对象的创建工作。目的是省去在对象发生变化时&#xff0c;需要修改代码中每一处对象创建的地方&#xff0c;应用这种模式&#xff0c;可以在一个复杂对象的内部结构(由许多其他子对象构成的…

LeetCode—309. 最佳买卖股票时机含冷冻期

309. 最佳买卖股票时机含冷冻期 题目描述&#xff1a; 给定一个整数数组prices&#xff0c;其中第 prices[i] 表示第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下&#xff0c;你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff…