有关集中用户的问题
集中用户应该有一个“所属管理插件”的字段,记录此用户的出处,比如“内部员工”,即由“内部控制台”插件管理。
那么用户 staff_tommy 的“所属管理插件”的字段值为“InternelWebControlPanel”.
系统内核插件提供一个扩展点为“UserProvider”
<extension-point id="UserProvider" name="统一用户提供者" schema="schema/UserProvider.exsd"></extension-point>
各个需要统一用户管理功能的插件均可扩展这个扩展点,扩展规格是:必须实现以下接口:
/// <summary>
/// IUserOpCallBack 统一用户管理的回调操作。
/// </summary>
public interface IUserOpCallBack
{
/// <summary>
/// 创建用户,创建完毕后应将具体用户的ID存入ISysUser的ExternId域
/// </summary>
/// <param name="transaction">事务</param>
/// <param name="userContext">统一用户上下文</param>
/// <returns>创建状态</returns>
IStatus CreateUser(IDbTransaction transaction, ISysUserContext userContext);
/// <summary>
/// 修改用户
/// </summary>
/// <param name="transaction">事务</param>
/// <param name="userContext">统一用户上下文</param>
/// <returns>创建状态</returns>
IStatus ModifyUser(IDbTransaction transaction, ISysUserContext userContext);
/// <summary>
/// 删除用户
/// </summary>
/// <param name="trans">事务</param>
/// <param name="userContext">统一用户上下文</param>
/// <returns></returns>
IStatus DeleteUser(IDbTransaction trans, ISysUserContext userContext);
}
/// IUserOpCallBack 统一用户管理的回调操作。
/// </summary>
public interface IUserOpCallBack
{
/// <summary>
/// 创建用户,创建完毕后应将具体用户的ID存入ISysUser的ExternId域
/// </summary>
/// <param name="transaction">事务</param>
/// <param name="userContext">统一用户上下文</param>
/// <returns>创建状态</returns>
IStatus CreateUser(IDbTransaction transaction, ISysUserContext userContext);
/// <summary>
/// 修改用户
/// </summary>
/// <param name="transaction">事务</param>
/// <param name="userContext">统一用户上下文</param>
/// <returns>创建状态</returns>
IStatus ModifyUser(IDbTransaction transaction, ISysUserContext userContext);
/// <summary>
/// 删除用户
/// </summary>
/// <param name="trans">事务</param>
/// <param name="userContext">统一用户上下文</param>
/// <returns></returns>
IStatus DeleteUser(IDbTransaction trans, ISysUserContext userContext);
}
/// <summary>
/// ISysUserContext 统一用户的上下文。
/// </summary>
public interface ISysUserContext
{
/// <summary>
/// 具体的用户对象,如职员
/// </summary>
object ConcreteUser
{
get ;
}
/// <summary>
/// 统一用户对象
/// </summary>
ISysUser SysUser
{
get ;
}
}
/// ISysUserContext 统一用户的上下文。
/// </summary>
public interface ISysUserContext
{
/// <summary>
/// 具体的用户对象,如职员
/// </summary>
object ConcreteUser
{
get ;
}
/// <summary>
/// 统一用户对象
/// </summary>
ISysUser SysUser
{
get ;
}
}
/// <summary>
/// ISysUser 统一用户身份接口。
/// </summary>
public interface ISysUser
{
/// <summary>
/// 具体类型的用户的ID
/// </summary>
int ExternId { get; set; }
/// <summary>
/// 名
/// </summary>
string SysUser_FirstName { get; set; }
/// <summary>
/// 自动编号
/// </summary>
int SysUser_Id { get; set; }
/// <summary>
/// 密码
/// </summary>
string SysUser_Password { get; set; }
/// <summary>
/// 管理此用户的插件标识
/// </summary>
string SysUser_PluginId { get; set; }
/// <summary>
/// 状态
/// </summary>
int SysUser_Status { get; set; }
/// <summary>
/// 姓
/// </summary>
string SysUser_SurName { get; set; }
/// <summary>
/// 账号
/// </summary>
string SysUser_Userid { get; set; }
}
/// ISysUser 统一用户身份接口。
/// </summary>
public interface ISysUser
{
/// <summary>
/// 具体类型的用户的ID
/// </summary>
int ExternId { get; set; }
/// <summary>
/// 名
/// </summary>
string SysUser_FirstName { get; set; }
/// <summary>
/// 自动编号
/// </summary>
int SysUser_Id { get; set; }
/// <summary>
/// 密码
/// </summary>
string SysUser_Password { get; set; }
/// <summary>
/// 管理此用户的插件标识
/// </summary>
string SysUser_PluginId { get; set; }
/// <summary>
/// 状态
/// </summary>
int SysUser_Status { get; set; }
/// <summary>
/// 姓
/// </summary>
string SysUser_SurName { get; set; }
/// <summary>
/// 账号
/// </summary>
string SysUser_Userid { get; set; }
}
用户所属的插件可以理解为用户的域,相同域的用户不能有同名的账号.
统一用户表还应该提供一个 ExternId 的字符型字段, 其值完全由插件系统
去提供,并由其自行理解,可以是一个 int.ToString(),也可以是一个内部编码什么的。
一般来说,管理具体用户的插件都有一个用户表,比如职员表,(不过这个扩展空间很大,谁知道呢,也许是从AD或者LDAP中取得用户,今天还谈了个项目是从别的软件系统中通过WebService取得用户,真是千奇百怪),
当这个插件加入系统的时候,希望不要修改这个表结构,如在此表中加入类似“统一用户ID”这样的字段,因此在统一用户表
中加入这个ExternId字段。