• 在人力资源树当中,上级对下级员工信息查看修改操作。


    人力资源

    在一个树型结构当中,存在对下属员工进行操作,如修改员工的信息等.

    员工表字段 EmployeeId PerantId LoginName Name ...

    例如
    A  ——————————————————————1
       A_1  ————————————————————2
       A_2
       A_3
                A_3_1 —————————————————3
                A_3_2
                A_3_3
                A_3_4
       A_4(B)
                A_4_1(C)
                          A_4_1_1( D)   ———————————4
                                         A_4_1_1_1(E) ———————5
                A_4_2
                A_4_3
                A_4_4
    。。。。

    现在 A 有权力下面所有人进行修查看操作。

    而 A_4 的权限只能查看,他下面员工的信息,不能查看A_3、A_2、A_1 的信息及他们各自的下属的信息。

    现在 B  员工要对 E 员工进行修改,可是数据库里又没对 B 员工修改下面员工 E 的权限。

    如果对 B 进行权限设置,他就得对它下面所有每个员工进行权限分配,这样的话权限表就会非常大了。

    最底一层(N)就可以有N-1个人有对他修改的权限,这样不好。

    如果要 E 的内容可以由 D、C、B、A 这些人才可以修改,其他人就不行了

    要实现 B 有没有对 E 员工进行修改的权限,由两种法子(我认为)

    第一就是通过算法,把 B 下属员工全部取出来,然后看 E  在没有在里头。

    第二就是通过算法,我把有修改 E 用户信息的员工取一个,跟 B 进行比较是不是到了

    如果没有再从 E 的上级的上级取出来跟 B 进行比较,依此类推如果没有 B  的话,它最多取 N-1 次结束。

    我个人认为第二种要比第一种好得好。

    下面我就把实现第二种的代码如下


    private static string connectionString = ConfigurationManager.ConnectionStrings["WaterOfficeConnectionString"].ToString();
    private static SqlConnection getSqlConnection()
    {
        SqlConnection cn 
    = new SqlConnection();
        cn.ConnectionString 
    = connectionString;
        cn.Open();
        
    return cn;
    }

    private static SqlCommand getSqlCommand()
    {
        SqlConnection cn 
    = getSqlConnection();
        SqlCommand cmd 
    = new SqlCommand();
        cmd.Connection 
    = cn;
        
    return cmd;
    }
     
    private static object ExecuteScalar(string executeString)
    {
        
    object obj = null;
        SqlCommand cmd 
    = getSqlCommand();
        
    try
        
    {
            cmd.CommandText 
    = executeString;
            obj 
    = cmd.ExecuteScalar();
        }

        
    finally
        
    {
            cmd.Connection.Close();
        }

        
    return obj;
    }

    private int employeeID(string userName)
    {
        
    string sqlString = "select EmployeeId from employee where LoginName  = '" + userName + "'";
        
    int  userNameId = int.Parse(ExecuteScalar(sqlString).ToString());
        
    return userNameId;
    }

    private static int _pId;
    /// <summary>
    /// 员工上一级的ID号
    /// </summary>

    private static int pId
    {
        
    get return _pId; }
    }

    /// <summary>
    /// 员工上一级的ID号
    /// </summary>
    /// <param name="pid"></param>
    /// <returns></returns>

    private static int ParentID(int pid)
    {
        
    int parentId;
        
    string sqlString = "select ParentId,isDel from employee where EmployeeID = " + pid;
        SqlCommand cmd 
    = getSqlCommand();
        cmd.CommandText 
    = sqlString ;
        SqlDataReader sdr 
    = cmd.ExecuteReader();
        
    if (!sdr.Read())
        
    {
            
    return -404;
        }

        parentId 
    = sdr.GetInt32(0);
        _isDel 
    = sdr.GetBoolean(1);
        
    if (parentId == 0 || _isDel == false)
        
    {
            _pId 
    = parentId;
        }

        sdr.Close();
        cmd.Connection.Close();
        
    return parentId;
    }

    /// <summary>
    /// 判断是不是相同,如果员工的上级ID与此管理员ID相同就为 true 
    /// </summary>
    /// <param name="number1">管理员ID</param>
    /// <param name="number2">上一级的ID</param>
    /// <returns></returns>

    private bool isExist(int number1, int number2)
    {   
        
    if (number1 == number2)
        
    {
            
    return true;
        }

        
    else
        
    {
            
    return false;
        }

    }


    /// <summary>
    /// 看看是不是这个员工的上级员工ID号
    /// </summary>
    /// <returns></returns>

    private bool isEmployeeParentId()
    {
        
    int userId1 = employeeID("userName1") ;
        
    int userId2 = employeeID("userName2");
        
    int parId = ParentID(userId1);
        
    bool temp = true;
        
    while (!isExist(userId2, parId))
        
    {
            
    if (pId == 0 || parId == -404)
            
    {
                temp 
    = false;
                
    break;
        }

        parId 
    = ParentID(parId);
        }

        
    return  temp;
    }


    我只想到这种法子,第一种的实现我觉得好难,写不出来。

    我想一定还会有再好的算法。

  • 相关阅读:
    Java连接Elasticsearch
    使用EasyPoi导出Excel
    递归遍历组织机构树
    打算用mongodb mapreduce之前一定要知道的事!!!
    css 手机禁止页面拖动
    js各种验证代码
    async nodejs
    防止在iOS设备中的Safari将数字识别为电话号码
    SQL中char、varchar、nvarchar的区别
    双击事件阻止点击事件
  • 原文地址:https://www.cnblogs.com/xiaotuni/p/2365784.html
Copyright © 2020-2023  润新知