如何自动赋予新用户系统用户角色并如何将其显示在网站顶部?

2023-11-30

我对员工表进行了以下数据库设计:

  • Username
  • Name
  • Job
  • etc ..

还有一个角色表:

  • RoleID
  • RoleName

最后是一个UserRole表:

  • 用户角色ID
  • Username
  • RoleID

我正在为公司的部门开发一个基于 Intranet Web 的应用程序。该应用程序只能由我部门的员工访问,并且该员工的用户名及其角色(访问类型)应位于网站顶部。我有四个不同的角色;经理、贡献者、助理和用户。我现在想要的是执行以下操作:

  1. 检查用户是否是部门员工之一。
  2. 如果没有,他会看到一个错误页面
  3. 如果是,他将能够直接访问该网站,并且这是他第一次访问该网站,那么他应该获得一个用户角色,并且该角色应立即与用户名一起显示在顶部,除非管理员添加他并且给了他其他角色之一。

一切都运行良好,除了使用的用户没有获得用户角色,并且如果用户是系统新手,则该角色不会显示在顶部,除非管理员确定他在数据库中的访问权限

那么,我如何为新用户提供默认角色,并在用户名之外立即将其显示在网站顶部?

我的后台代码如下:

private bool CheckUsername(string username)
    {
        if (Service.GetPerson(username).GetProperty("RES_NETID").Equals("-"))
            return false;
        else if (Security.isPMODMember(username))
            return true;
        else
            return false;

        //string connString = "Data Source=localhost\\sqlexpress;Initial Catalog=psspdb;Integrated Security=True";
        //string cmdText = "SELECT Count(*) FROM employee WHERE Username = '" + username + "'";
        //using (SqlConnection conn = new SqlConnection(connString))
        //{
        //    conn.Open();
        //    // Open DB connection.
        //    using (SqlCommand cmd = new SqlCommand(cmdText, conn))
        //    {
        //        int count = (int)cmd.ExecuteScalar();
        //        // True (> 0) when the username exists, false (= 0) when the username does not exist.
        //        return (count > 0);
        //    }
        //}
    }


    protected void Wizard1_NextButtonClick(object sender, WizardNavigationEventArgs e)
    {
        string username = TextBox1.Text;
        string connString = "Data Source=localhost\\sqlexpress;Initial Catalog=psspdb;Integrated Security=True";

        switch (Wizard1.WizardSteps[e.NextStepIndex].ID)
        {
            case "WizardStep2":

                //For checking the user        
                if (!String.IsNullOrEmpty(username) && CheckUsername(username))
                {
                    try
                    {
                        SqlConnection conn = new SqlConnection(connString);
                        conn.Open();
                        string cmdText = @"SELECT dbo.employee.Username, dbo.employee.Name, dbo.employee.JobTitle, dbo.employee.BadgeNo,
                                                ISNULL(dbo.Roles.RoleID, 3) AS RoleID, dbo.Divisions.DivisionName, dbo.Roles.RoleName
                                         FROM  dbo.Divisions INNER JOIN dbo.employee ON dbo.Divisions.SapCode = dbo.employee.DivisionCode
                                                LEFT OUTER JOIN dbo.Roles RIGHT OUTER JOIN dbo.UserRole ON dbo.Roles.RoleID = dbo.UserRole.RoleID ON
                                                dbo.employee.Username = dbo.UserRole.Username
                                         WHERE     (dbo.employee.Username = @Username)";
                        SqlCommand myCommand = new SqlCommand(cmdText, conn);
                        myCommand.Parameters.AddWithValue("@Username", username);
                        DataTable table = new DataTable();
                        SqlDataAdapter adapter = new SqlDataAdapter(myCommand);
                        adapter.Fill(table);

                        ObjectUser user = new ObjectUser(username, true);

                        string Name = user.Name;
                        string Username = user.ID;
                        string DivisionName = user.Org.Title;
                        string JobTitle = user.GetProperty("EMP_TITLE");
                        string BadgeNo = user.GetProperty("EMP_BADGE_NUMBER");
                        string role = "User";
                        string roleid = "3";
                        if (table.Rows.Count > 0)
                        {
                            role = table.Rows[0]["RoleName"] as string;
                            roleid = table.Rows[0]["RoleID"].ToString();
                        }

                        lblName.Text = Name;
                        lblUsername.Text = Username;
                        lblDivision.Text = DivisionName;
                        lblJobTitle.Text = JobTitle;
                        lblBadgeNo.Text = BadgeNo;

                        lblRole.Text = role;
                        radio1.SelectedValue = roleid;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.ToString());
                    }
                }

                else
                {
                    //If the user does not exist or a blank value has been entered
                    //Cancel the nextstep redirection and display an error message in a span
                    e.Cancel = true;
                    errorSpan.InnerText = "The username specified is blank or does not belong to PMOD";
                }

                break;
            case "WizardStep3":

                break;
        }
    }




    protected void Wizard1_FinishButtonClick(object sender, WizardNavigationEventArgs e)
    {
        //If one of the items is selected AND a username exists in the Username session object update the user role
        string username = TextBox1.Text;

        if (!String.IsNullOrEmpty(radio1.SelectedValue) && !String.IsNullOrEmpty(username))
        {
            string connString = "Data Source=localhost\\sqlexpress;Initial Catalog=psspdb;Integrated Security=True";

            //This for adding the new PMOD user to the system
            string insertUserCommand = "INSERT INTO employee (Name, Username, JobTitle, BadgeNo, EmpOrgType, DivisionCode) values (@Name, @Username, @JobTitle, @BadgeNo, @EmpOrgType, @DivisionCode)";
            string cmdText = "SELECT Count(*) FROM employee WHERE Username = '" + username + "'";
            using (SqlConnection conn = new SqlConnection(connString))
            {
                conn.Open();
                // Open DB connection.
                using (SqlCommand cmd = new SqlCommand(cmdText, conn))
                {
                    if ((int)cmd.ExecuteScalar() == 0)
                    {
                        //An object from ObjectUser class to get the user information from the Secure system and insert them to the database
                        ObjectUser user = new ObjectUser(username, true);

                        SqlCommand cmd2 = new SqlCommand(insertUserCommand, conn);
                        cmd2.Parameters.AddWithValue("@Name", user.Name);
                        cmd2.Parameters.AddWithValue("@Username", username);
                        cmd2.Parameters.AddWithValue("@JobTitle", user.GetProperty("EMP_TITLE"));
                        cmd2.Parameters.AddWithValue("@BadgeNo", user.GetProperty("EMP_BADGE_NUMBER"));
                        cmd2.Parameters.AddWithValue("@EmpOrgType", user.GetProperty("EMP_EMPTYPE"));
                        cmd2.Parameters.AddWithValue("@DivisionCode", user.Org.Division.SapCode);
                        cmd2.ExecuteNonQuery();
                    }

                }
            }

            //For updating the role of the user by deleting its current role and inserting a new role
            string deleteCommand = "DELETE FROM UserRole where Username=@Username";
            string insertCommand = "INSERT INTO UserRole (RoleID,Username) values(@RoleID,@Username)";
            using (SqlConnection conn = new SqlConnection(connString))
            {
                conn.Open();
                //using (SqlCommand cmd = new SqlCommand(cmdText, conn))
                using (SqlCommand cmd = new SqlCommand(deleteCommand, conn))
                {
                    cmd.Parameters.AddWithValue("@Username", username);
                    cmd.ExecuteNonQuery();
                    //Now the insert
                    cmd.CommandText = insertCommand;
                    cmd.Parameters.Clear(); //need this because still has params from del comm
                    cmd.Parameters.AddWithValue("@RoleID", radio1.SelectedValue);
                    cmd.Parameters.AddWithValue("@Username", username);
                    cmd.ExecuteNonQuery();
                    //infoSpan.InnerText = String.Format("The users role has been updated to - {0}", radio1.SelectedValue);
                    //cmd.ExecuteScalar();
                    //infoSpan.InnerText = String.Format("The users role has been updated to - {0}", radio1.SelectedValue);
                }
            }

            Wizard1.Visible = false;
            wizard.InnerHtml = @"<p><b>The task has been done successfully.</b> <br /> <a href='UserManagement.aspx'>Edit Another User</a></p>";
        }


    }

我想我已经在向导步骤#2 中做到了,如上所示,但它现在确实有效,我不知道为什么。有什么帮助吗?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何自动赋予新用户系统用户角色并如何将其显示在网站顶部? 的相关文章

  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 启动时出现 OData v4 错误:找不到段“Whatever”的资源

    我正在构建新的 v4 服务 一切进展顺利 直到我为新模型 实体添加了新控制器 并在启动站点进行测试运行时收到此错误 控制器似乎编码正确 就像其他控制器一样 控制器 CustomersOData 中的操作 GetFeed 上的路径模板 Cus
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 如何在 C# 中定义文本框数组?

    您好 当我在 Windows 申请表上创建文本框时 我无法将其命名为 box 0 box 1 等 我这样做的目的是因为我想循环使用它们 其实我发现TextBox array firstTextBox secondTextBox 也有效
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 上下文敏感与歧义

    我对上下文敏感性和歧义如何相互影响感到困惑 我认为正确的是 歧义 歧义语法会导致使用左推导或右推导构建多个解析树 所有可能的语法都是二义性的语言是二义性语言 例如 C 是一种不明确的语言 因为 x y 总是可以表示两个不同的事物 如下所述
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • 如何从main方法调用业务对象类?

    我已将代码分为业务对象 访问层 如下所示 void Main Business object public class ExpenseBO public void MakeExpense ExpensePayload payload var
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • 如何将 Roslyn 语义模型返回的类型符号名称与 Mono.Cecil 返回的类型符号名称相匹配?

    我有以下代码 var paramDeclType m semanticModel GetTypeInfo paramDecl Type Type Where paramDeclType ToString returns System Col
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub

随机推荐

  • function(e){e.something...} e 是什么?

    当我写作时 new lang click function e alert something e stopPropagation What is e在这里 为什么没有它该功能就无法工作 为什么我可以写任何东西而不是e e is the 事
  • 在模块中使用闪亮的 i18n 翻译闪亮的应用程序?

    Problem 我想将模块化闪亮应用程序的部分内容翻译成德语或英语 我想使用的包是shiny i18n这似乎适用于非模块化应用程序 并且似乎很容易处理 然而 在下面的模块化闪亮玩具示例中 翻译不起作用 有什么建议为什么会发生这种情况吗 服务
  • Nodejs - net 或 http 模块

    我正在做聊天系统nodejs 要创建节点服务器 我可以使用net or http模块 那么使用它们的区别和好处是什么 http是建立在net 它处理 HTTP 底层的 TCP 层 我想你的 聊天系统 将有基于浏览器的客户端 因为 Node
  • 如何等待非子进程退出

    对于子进程 wait and waitpid 函数可用于暂停当前进程的执行 直到子进程退出 但该函数不能用于非子进程 是否还有另一个函数可以等待任何进程的退出 没有什么相当于wait 通常的做法是使用轮询kill pid 0 并寻找返回值
  • 是否可以让 C++ 方法接受 const char* 和 const wchar_t* 作为参数而不重载该方法?

    UPDATE 我选择了模板方法 因为它看起来最优雅 简洁 但最终我得到了这样的东西 template
  • 将 RData 文件读入 Shiny 应用程序

    我正在开发一个闪亮的应用程序 它将读取一些 RData 文件并显示包含内容的表格 这些文件由脚本生成 最终将数据转换为数据帧 然后使用 save 函数保存它们 在闪亮的应用程序中 我有三个文件 ui R server R 和 global
  • 如何只显示角边框?

    我想知道是否可以在 CSS 中制作边框 但仅限于角 像这样的事情 CONTENT 您可以使用多个线性渐变作为背景图像来实现这一点 div width 100px height 100px background linea
  • 是否可以检查用户何时下载我的 ios 应用程序? [复制]

    这个问题在这里已经有答案了 是否可以检查用户何时下载了我的 iOs 应用程序 如果可以 是否可以从中创建一个 if 语句 例如 if downloadDate gt 1march 抱歉 如果您认为这个问题很糟糕 任何代码将不胜感激 D 还应
  • C# Process.Start 参数被截断

    当传递很长的文件路径时 我的参数被截断 我需要启动一个程序并通过命令参数传递所有内容 有时它只是截断命令 它是在全局范围内进行的 因此这不仅是每个参数的问题 而且是整个参数的问题 编辑 问题可能是命令行长度的限制monkey p说 问题是
  • 通过 C 代码计算 Minix 系统上正在运行的进程数

    所以 一开始这看起来很简单 但是在爬行谷歌和这里之后 答案似乎并不像我最初想象的那么简单 基本上 我正在编辑一个 MINIX 内核 作为我的操作系统课程实践的一部分 并且我必须添加一个小功能 当您在信息服务器中按下功能键时 它会显示正在运行
  • 将数据框转换为命名向量

    我在我的 dfm 上应用了一个模型 wordscore 结果我得到了一个输出对象 其类是 textmodel wordscores textmodel list 我对输出 wordscores 感兴趣 它是一个 数字 对象 这就是当clas
  • Java 返回在特定条件下首先执行的 Future,或者同时处理两者

    我有两个 API 它们返回两个不同的结果类 我们将这两个结果结合起来得到一个 FinalClass 基本上 如果这些Api同时运行 如果它首先收到具有特定结果 G H 的A类 则B类是什么并不重要 我们不会等待serviceAPI B 只需
  • 如何在 jetpack compose 中将光标从一个文本字段传递到另一文本字段?

    我有两个文本字段 用户将输入他们的体重和目标体重 当用户单击目标体重时 会出现一个选择器 用户可以从中选择自己的体重 如果用户选择他的体重并按下 确定 按钮 我希望它自动切换到目标体重文本字段 听到的是我的代码 我正在分享示例文本字段 Co
  • AdMob 及其工作原理是什么?

    我对 AdMob 感到困惑 我刚刚注册 我想在应用程序中投放广告 我去添加网站 应用程序 以为就是这样 有一个问题和字段显示 Android 包 url 我点击了问号 它谈到了格式化它 就像这样 market details id 首先 它
  • 如何更改任务栏颜色和sf符号颜色?

    如何更改标签栏背景颜色and将 sf 符号设置为自定义颜色 我已经尝试过 tabitem 下的背景 颜色 颜色 其上方 括号内 我尝试使用符号来执行 palette 因为我做了一个我想使用的自定义颜色 但我不知道如果它在标签中我无法修改它
  • MySql:使用 .NET/Connector 使用准备好的语句调用存储过程会更快吗?

    我已经阅读了一些有关 MySql 的预处理语句的内容 并且 NET Connector 确实支持它们 我想知道的是 如果我使用预准备语句调用相同的存储过程数千次 是否比不使用预准备语句执行更快或更好的性能 因为存储过程实际上应该已经编译 E
  • Intellij - 如何将文本文件添加到资源中

    我正在读一本 properties文件使用properties load和文件名 我想将属性文件添加到 jar 或类路径中 如何将文件添加到 jar 中 我如何从罐子里读取内容 将文件放在源文件夹中 它将被复制到输出并根据以下内容与类一起添
  • 解释一下 phi 系数函数在 Eloquent Javascript 中是如何工作的?

    我目前正在阅读 Eloquent Javascript 到目前为止 这是一本很好的书 但我一直停留在他提出的这个用于计算 phi 系数的函数上 这是代码 显然有很多上下文 我无法复制 粘贴书中的所有内容 所以如果真正读过这本书的人可以向我解
  • 为什么 sysctl 在 Mac OS X 上产生 E_INVAL?

    下面是一个精简的 省略了错误 空检查 C Obj C 代码片段 它使用 sysctl 获取 PID 50 的特定进程的 argv int getProcessArgs 3 CTL KERN KERN PROCARGS 50 sysctl g
  • 如何自动赋予新用户系统用户角色并如何将其显示在网站顶部?

    我对员工表进行了以下数据库设计 Username Name Job etc 还有一个角色表 RoleID RoleName 最后是一个UserRole表 用户角色ID Username RoleID 我正在为公司的部门开发一个基于 Intr