一个项目即将完工,后来填加了一个权限功能 权限低的用户某些BUTTON的功能不能使用 并且要弹出提示 说明权限不够
权限的值是拿SESSION传递的我个人有2个方案:
一:在页面加载完后 在OnPreRender事件里 判断SESSION的值 如果权限低的用户 就把那些不能使用的BUTTON的Enabled属性设为FALSE
   结果因为没实现提示效果而被驳回
二:在每个BUTTON按钮的事件里加SESSION的判断语句  如果权限低的 就弹出提示
   结果因为改动量太大而被驳回。在此请教各位CSDN大侠们  求一个好的方案!!!
灌水的朋友请不要来,请尽量说的详细一点,适当给出部分代码。
急要!!!万分感谢!!!

解决方案 »

  1.   

    直接Visible=False
    连提示都省了
      

  2.   

    按第一种执行 把BUTTON的Enabled属性设为FALSE
    并把BUTTON的Text属性值设为"权限不够"
      

  3.   

    首先:如果你说要修改的按钮功能数量不多,可以考虑创建一个用户功能权限分配表(tUserFormRight)
    该表主要字段:
    用户id
    窗体名称
    功能ID(比如:更新、删除、查询等功能,每一个对应一个唯一标识)
    是否具有相应权限创建一个类 声明一个方法,比方命名为checkUserRight 
    private int checkUserRight(string UserId,string FormName,Hashtable rightHt)
    {
    ...
    }参数:
    UserId 当前帐户ID
    FormName 当前窗体名称
    rightHt 按钮控件功能与名称键值对这个方法根据哈希表中键值对以及当前用户及窗体名称到用户功能权限分配表(tUserFormRight)查询是否具备权限,
    并根据权限设置按钮的enable或者visible属性在每个窗体的page_load事件中调用该类的方法就可以
    这个方法的性能取决于用户多少以及窗体多少抛砖引玉
      

  4.   

    tUserFormRight表中记录数将约等于 用户数 * 画面数 * 功能类别数所以,如果用户很多 画面很多 功能很多,你将面临整理大量基础数据以及由大数据量造成的画面权限设置响应时间长短问题。你自己合计合计
      

  5.   

    可以这样
    在后台代码中        public string sessionFlag = "false";
            protected void Page_Load(object sender, EventArgs e)
            {
                if (Session["yourSessionName"] != null)//你的session判断方法
                {
                    sessionFlag = "true";
                }            
            }按钮事件    <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click1" OnClientClick="return check()" />java脚本  function check()
      {
        var sessionFlag="<%=sessionFlag %>"; 
        if(sessionFlag== "true")
        {
           return true;
        }
        else
        {
           alert("没有权限")
           return false;
        }
    }
      

  6.   

    两种方法
    1、新建类,把Button包在里面,新建个检查session的方法vb.net
    public class myButton
    Inherits Button
    public function checksession() as bolean
    '这里写检查session的代码
    end functionend class2、重新写一个Button,自动检查,这样所有的button都变味儿了建议选择第一项
      

  7.   

    cco3322  的方法实现的结果就相当与我的方案一。。没有提示
    keyake863 的方法很好 但是也就相当于我的方案二改动量太大了。。
    还是谢谢你们 
    期待更好的方案
      

  8.   

    能用。NET把方法一 具体的写一下吗?
      

  9.   


    能用ASP。NET 具体的写一下吗??!!!!
      

  10.   

    写个函数,放在类中,
    如 public bool check(string uid,int 权限id)
    {
       string sql="……………………………………“
       if( )
         return true;
       else
         return false;
    }
    每个按钮事件先验证
       if(!check(Session["uid"].Tostring,"本页面的权限id"))
       {
          Response.Write(alert())//弹出提示!!
       }
      

  11.   

    一:在页面加载完后 在OnPreRender事件里 判断SESSION的值 如果权限低的用户 就把那些不能使用的BUTTON的Enabled属性设为FALSE你把没有权限的button注册一个JavaScript事件,当用户点击时就会提示权限不足.
      

  12.   


    还是要把每一个BUTTON都弄过来  这方案肯定不能被接受还有2个IMAGEBUTTON  是在DATAGRID的每个行里面的期待更好的方案
    被采纳的方案直接100分
      

  13.   

    那这个办法楼主你觉得麻烦吗?每个页面只添加一次        protected void Page_Load(object sender, EventArgs e)
            {
                if (Session["yourSessionName"] == null)//你的session判断方法
                {
                    for (int i = 0; i < form1.Controls.Count; i++)
        {
                        if (form1.Controls[i].GetType()== typeof(Button))
                        {
                            Button myBut = (Button)form1.Controls[i];
                            myBut.OnClientClick = "return check()";
                        }
        }
    }          
            }
      function check()
      {
         alert("没有权限");
         return false;
      }
      

  14.   


    很好的办法。。我需要的就是这个  那请问datagrid里面的 IMAGEBUTTON 怎么办??  也要屏蔽的怎么办???
      

  15.   

    IMAGEBUTTON  把这句form1.Controls[i].GetType()== typeof(IMAGEBUTTON)
     不可以吗?
      

  16.   

    不知道你为什么非得把无权利使用的控件摆在那让用户点一般情况下,用户无权使用的功能,应该让其不可见,至少是unable(一篇微软程序员代码编写标准里头写的,具体文章名字忘了,很久以前看的了)就我实施的经验看,最终用户看到的功能越少(前提是满足其工作基本需要),麻烦事越少举个简单例子:同时期进公司的2个人,能力必定有高下,你给甲开放的功能,未必要给乙(因为职务能力等因素),但实际情况是:别人有的,不管我要不要用,我都得有!这是很多时候用户的心理。他可能不说,可他有可能会有想法,甚至会给你实施过程找麻烦。所以,建议你跟你老大商量下,把提示干脆就弄成“是否可见”或者“是否可用”提示多了,尤其是“我没权利用这个东西”类的提示多了,用户会不爽,甚至懒得再探究这个软件的其他可用功能闲的没事,瞎掰,希望没耽误你正事
      

  17.   

    最后再纠正下你说的“第一个方法不能实现提示功能”参考下下边这个例子
    页面部分:
    <HTML>
    <HEAD>
    <title>test2</title>
    <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" Content="C#">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    <script language=javascript>
    function showMessage()
    {
    alert('ok');
    }
    </script>
    </HEAD>
    <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
    <asp:Button id="Button1" style="Z-INDEX: 101; LEFT: 304px; POSITION: absolute; TOP: 128px" runat="server"
    Text="Button"></asp:Button>
    </form>
    </body>
    </HTML>
    代码部分:
    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    if(!IsPostBack)
    {
    Hashtable ht = new Hashtable();
    ht.Add("b1",Button1);
    Ctest2 ct = new Ctest2();
    ct.myTest(ht);
    }
    }类Ctest2
    using System;
    using System.Collections;
    using System.Web.UI.WebControls;namespace dlpecjt.test
    {
    /// <summary>
    /// Ctest2 的摘要说明。
    /// </summary>
    public class Ctest2
    {
    public Ctest2()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    }
    public void myTest(Hashtable ht)
    {
    Button btTemp = (Button)ht["b1"];
    btTemp.Attributes.Add("onclick","showMessage();");
    }
    }
    }
      

  18.   

    好象可以哦  我试一下  真是很感谢你   我想要确定某一个具体的控件的话
    是不是写 
    if ((Button)form1.Controls[i].ID == "btn_add")
     {
         ((Button)form1.Controls[i]).OnClientClick = "return check()";  }
    这样好象不行  该怎么写啊。。!!!
      

  19.   

    keyake863   非常感谢你  也很感谢其他的朋友。。谢谢大家帮助  我要的效果实现了 
      原本我是这样写的
            object a = Session["popedom"];
            if (a != "3")
            {
                foreach (DataGridItem item in grid.Items)
                {
                    ImageButton imb_Edit = (ImageButton)item.FindControl("ib_Edit");
                    ImageButton imb_Delete = (ImageButton)item.FindControl("ib_Del");
                    imb_Delete.Enabled = false;                imb_Edit.Enabled = false;
                }
                if (a == "1")
                {
                    btn_add.Enabled = false;
                }
            }
    现在改成
               foreach (DataGridItem item in grid.Items)
                {
                    ImageButton imb_Edit = (ImageButton)item.FindControl("ib_Edit");
                    ImageButton imb_Delete = (ImageButton)item.FindControl("ib_Del");
                    imb_Delete.OnClientClick = "return check()";
                    imb_Edit.OnClientClick = "return check()";
                }            if (a == "1")
                {
                    btn_add.OnClientClick = "return check()";
                }
    这样就可以了   嘿嘿 谢谢哦 keyake863   100分是你的 说到做到 非常感谢大家