【问题标题】:Alert on GridView edit based on permissions基于权限的 GridView 编辑警报
【发布时间】:2014-06-11 11:20:49
【问题描述】:

我有一个带有编辑选项的 gridview,可以编辑 gridview 行。我的 Web 应用程序中也有不同的用户权限,例如管理员、超级用户、用户。如果用户不是Admin 并且他尝试编辑一行,我需要发出如下所示的警报。但是我在下面使用的 js 会提醒所有用户,因为没有设置验证。

到目前为止我的尝试

GridView:

<ItemTemplate>
    <asp:ImageButton ID="btnEdit" OnClientClick="myFunction()" runat="server" CommandName="Edit" CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" ImageUrl="~/Images/Edit.gif" />
</ItemTemplate>

Javascript:

function myFunction() {
        var edit;
        if (confirm("For ADMIN only. Do not edit/delete the row. Still want to continue?") == true) {
        }
        else {
            window.location.reload();
        }
        document.getElementById("btnEdit").innerHTML = edit;
    }     

捕获当前登录用户:

我还使用以下代码在同一页面中捕获了当前登录的用户。当前登录的用户信息保存在标签中。

protected void Page_Load(object sender, EventArgs e)
{
    checkUser();
}

public void checkUser()
{
    string currentUser = HttpContext.Current.Request.LogonUserIdentity.Name;
    string[] words = currentUser.Split('\\');
    currentUser = words[1];
    DataSet ds = new DataSet();
    using (SqlConnection conn = new SqlConnection(strcon))
    {
        SqlCommand command = new SqlCommand();
        command.Connection = conn;
        string strQuery = "select UserId from Permissions where UserId='" +  currentUser + "'";
        SqlCommand cmd = new SqlCommand(strQuery, conn);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(ds);
    }
    lblUser.Text = ds.Tables[0].Rows[0]["UserName"].ToString();
}

Permissions 表中,我有一个名为 Roles 的列,我需要检查用户是否不是管理员并且需要发出警报。非常感谢您对此的任何建议或帮助。

【问题讨论】:

  • 为什么要提醒用户?这似乎是一个沮丧的用户。相反,为什么不为无权访问的人隐藏编辑按钮?
  • @mason - 不,他们可以编辑该行,但我仍然需要显示警报。
  • 在这种情况下,为什么要使用会破坏工作流程的警报?通知用户而不妨碍用户的通知可能更可取,例如noty
  • @mason - 我无法访问链接。
  • 只是一个我喜欢的通知库的链接。还有一些其他的,例如Notify.jsalertify.js

标签: c# javascript asp.net gridview


【解决方案1】:

试试这个方法

脚本为

     <script language="javascript" type="text/javascript">
      function myFunction() {
          var edit = confirm("For ADMIN only. Do not edit/delete the row. Still want to continue?");
          if (edit) {
              return true;
          }
          else {
              return false;
          }
       } 
      </script>

函数调用为 OnClientClick="return myFunction();"

【讨论】:

  • 但是我在脚本中的哪个位置检查用户角色,比如如果不是管理员执行此功能。我需要向非管理员用户发出此警报。
【解决方案2】:

你可以这样做。

protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
  if (e.Row.RowType == System.Web.UI.WebControls.DataControlRowType.DataRow)
  {
    Button btnEdit = e.Row.FindControl("btnEdit") as Button;
    if(lblUser.Text !="Admin")
      btnEdit.OnClientClick = "alert('Not allowed');return false;";
  }
}

如果您想使用您的功能,您可以进行如下更改:

 btnEdit.OnClientClick = "return myFunction()";

【讨论】:

  • 我在这行Object reference not set to an instance of an object. 收到此错误btnEdit.OnClientClick = "alert('Not allowed');return false;";
  • 这里 e.Row.FindControl("btnEdit") 我已经根据它的 ID 搜索了按钮控件,如果您使用的是命令字段,则需要进行更改。
  • Vicky 你能粘贴你使用的代码并得到错误吗?
【解决方案3】:

你为什么不在服务器端做呢?当您进入编辑功能时,请检查权限。这样一来,“聪明”用户仍然无法进行编辑,因为他绕过了您的客户端检查。

【讨论】:

  • 我尝试了gmd 答案,但我收到了我在这篇文章中提到的错误。
  • 那是因为他没有调用实际的服务器端函数。我的意思是让按钮点击返回到服务器,并在那里处理点击
  • 然后创建 GridRowBtnEditClick 方法,并在其中使用 CheckUser
猜你喜欢
  • 2014-07-30
  • 2017-08-24
  • 2014-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 2018-04-01
  • 2018-01-27
相关资源
最近更新 更多