有关集中用户的问题

集中用户应该有一个“所属管理插件”的字段,记录此用户的出处,比如“内部员工”,即由“内部控制台”插件管理。
   那么用户 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);
    }
/// <summary>
    
/// 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 getset; }

        
/// <summary>
        
/// 名
        
/// </summary>

        string SysUser_FirstName getset; }

        
/// <summary>
        
/// 自动编号
        
/// </summary>

        int SysUser_Id getset; }

        
/// <summary>
        
/// 密码
        
/// </summary>

        string SysUser_Password getset; }

        
/// <summary>
        
/// 管理此用户的插件标识
        
/// </summary>

        string SysUser_PluginId getset; }
        
        
/// <summary>
        
/// 状态
        
/// </summary>

        int SysUser_Status getset; }

        
/// <summary>
        
/// 姓
        
/// </summary>

        string SysUser_SurName getset; }

        
/// <summary>
        
/// 账号
        
/// </summary>

        string SysUser_Userid getset; }
    }


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

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

原文地址:https://www.cnblogs.com/xiaotaoliang/p/455044.html