根据用户授权禁用复选框列

本文关键字:复选框 授权 用户 | 更新日期: 2023-09-27 18:07:15

我有一个网格,在网格中我有两个项目模板列-复选框1和复选框2。
我想禁用整个复选框1列的基础上,如果一个用户是管理员或普通用户。
比如说,如果一个用户是admin,我希望这两列都被启用,并且用户可以选中/取消选中这两列。
但是,如果用户是"普通用户",我想禁用"Checkbox1",这样用户只能选中/取消选中复选框2。但是可以看到"Checkbox 1"列的值,不能编辑或更改。
目前,我正在实现这个行为如下-

    protected void grdchkbox_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if(e.Row.RowType == DataControlRowType.DataRow)
        {
            CheckBox chkbox1 = (e.Row.FindControl("Checkbox1") as CheckBox);
            if (IsGeneralUser(empid))
            {
                chkbox1.Enabled = false;
            }
        }
    }  

问题在于页面加载时间。
它在每次绑定行时检查用户的角色,这意味着在每次绑定行时进行db调用。
此外,它还为每行分别禁用了一个复选框。
有没有一种方法,我可以禁用整个复选框1列在一个去?

根据用户授权禁用复选框列

根据您的gridview设置,您可以尝试禁用对列的编辑或将其设置为只读。

您还可以简单地将用户状态保存在会话变量中,这样您只需要在第一次调用db,这也应该加快整个过程。

使用会话变量看起来像这样:

 protected void grdchkbox_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
        CheckBox chkbox1 = (e.Row.FindControl("Checkbox1") as CheckBox);
        //we check to see if we already have the users status saved in session
        var isUser = HttpContext.Current.Session["IsGeneralUser"];
        //if we dont, we run the IsGeneralUser method and save the result in session
        if(isUser == null)
        {
            isUser = IsGeneralUser(empid);
            HttpContext.Current.Session.Add("IsGeneralUser", isUser);
        }
        if (Convert.ToBoolean(isUser))
        {
            chkbox1.Enabled = false;
        }
    }
}