我的想法是做一个usercontrol来实现
每个要控制的页面上面加载一个usercontrol,设置usercontrol的页面权限属性,然后在页面load的时候把需要控制的控件传递到usercontrol中定义的一个control数组,然后依据用户登陆是赋予的权限来和usercontrol的页面权限属性来比较决定控件的visible,以达到控制拥护操作权限。不知道我的想法是否可行?
有没有其他的办法来达到我要的效果?怎么实现?
你们控制页面的权限一般是怎么做的?
每个要控制的页面上面加载一个usercontrol,设置usercontrol的页面权限属性,然后在页面load的时候把需要控制的控件传递到usercontrol中定义的一个control数组,然后依据用户登陆是赋予的权限来和usercontrol的页面权限属性来比较决定控件的visible,以达到控制拥护操作权限。不知道我的想法是否可行?
有没有其他的办法来达到我要的效果?怎么实现?
你们控制页面的权限一般是怎么做的?
如果你的控件数量不是很多的话,可以用三个<span runat="server">,对应着你的三中权限,里面有各种控件,然后根据用户的权限,显示对应的<span>,而其它两个不显示。
用<span runat="server">也可以实现
有时候要控制的控件的位置是比较的散乱的,而且不同的用户要可操作的控件的组合也是不一定的,有的用户要可操作两个控件,有的只可以操作一个,所以都放在<span runat="server">不怎么好控制
你写的那个东东可以给我参考一下吗?
谢谢!^_^
来这个问题讨论的都是高手呀(except me)
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls; /// <summary>
/// pageRights 的摘要说明。
/// </summary>
public abstract class pageRights : System.Web.UI.UserControl
{
private string m_allowRoles="?";
private bool isHaveRights=false;
//* 允许所有的用户,包括匿名用户
//? 允许所有已登录的用户,不包括匿名用户
//9 admin 8, caiwu,7, 审核,6 监测 //获取参数
public string allowRoles
{
get
{
return m_allowRoles ;
}
set
{
m_allowRoles = value ;
}
}
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if (!IsPostBack)
{
switch (m_allowRoles)
{
case "*": break;
case "?":
//登陆用户的权限,Session["userLevel"]==null表示用户没有登陆。
//目前系统的权限定义是 2是管理员,1是普通用户
if (Session["userLevel"]==null)
{
// Response.Redirect ("/DataPlatform/web/noRights.aspx");
return;
}
break;
default:
if (Session["userLevel"]==null)
{
// Response.Redirect ("/DataPlatform/web/noRights.aspx");
return;
}
if (int.Parse(Session["userLevel"].ToString())>=int.Parse(m_allowRoles))
{
isHaveRights=true;
break;
} if (!isHaveRights)
{
// Response.Redirect ("/DataPlatform/web/noRights.aspx");
return;
}
break; }//end switch
}
} #region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// 设计器支持所需的方法 - 不要使用
/// 代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
页面中使用:
<uc1:pageRights id="PageRights1" runat="server" allowRoles="2"></uc1:pageRights>
通过allowRoles="2"来决定页面的可访问权限,来和用户的权限比较。现想假如上面我提到的功能,比如给控件也赋予allowRoles="2"的属性,来决定控件的可访问权限,
大家多提意见。
我就是在问怎么实现你说的那样的功能?什么方法比较好?
我想问一下,当用户有一个权限的时候,对于页面控件有的可以编辑有的只能看,这个怎幺控制?
当用户有另一个权限的时候,控件的控制又不一样了。而且最不好的是属性太多,页面又要求美观,不能简单的用<span>和usercontrol来操作?
然后在aspx文件中判断。
在aspx文件中
<% if (usergroup=="manager") { %>
.....//manager类用户可以访问的控件
<% } %>
<% if (usergroup=="user") { %>
.....//user类用户可以访问的控件
<% } %>
如果要区分可编辑之类的属性,就在某类用户可见的控件设置为可编辑的。只允许view的用户就只给他属性是不可编辑的控件。这种办法,服务器控件和html控件都可以用。
或者在cs文件中设置权限表。
在aspx文件中
<% if (power.control1=="OnlyView") { %>
......
<% } %>
<% if (power.control1=="CanEdit") { %>
......
<% } %>
我打算在数据库中建一个控件和权限(功能)的对应表
例如:
权限名 控件名 是否只读 是否可见 是否有效
添加 添加按键 0 1 1
添加 修改按钮 0 0 0
添加 用户名 0 1 1
添加 密码 0 1 1修改 添加按钮 0 0 0
修改 修改按钮 0 1 1
修改 用户名 1 1 0
修改 密码 0 1 1
有几十个属性和十几个按键(也就是功能)
在程序中根据权限读出控件记录放在DataTable里
然后
首先在页面上把所有的控的属性全部置为不可见或只读或无效
for(int I =0; I <DataTableTemp.Rows.count ; I ++ )
{
string strControlID = DataTableTemp.Rows[i][” 控件名”].ToString();
WebControl TempControl = (WebControl) Form1.FindControl(DataTableTemp.Rows[i][” 控件名”].ToString);
switch(strControlID.substring(0,3)
{
case “txt”:
TempControl = (TextBox) TempControl;
case “cmd”:
TempControl = (Button) TempControl;}
if(DataTableTemp.Rows[i][”是否只读”].Tostring == “1”)
﹛
TempControl.Readonly = false
……..
﹜
…………
}我担心有些问题,一个是(WebControl)这种装箱,拆箱是不是能够成功?
还有一个FindControl的效率狂差,是不是会很影响速度,有没有什幺别的方法可以控制?
这种命名必须是匈牙利命名。对每个控件做控制,我想把同一类属性用控件数组,以前在VB中用过,但是现在在.net不知道能不能用
for(int i = 0 ; i < dtTemp.Rows.Count ; i ++ )
{
string strControlID = dtTemp.Rows[i]["Control"].ToString();
switch(strControlID.Substring(0 , 3))
{
case "txt":
TextBox TempControl = (TextBox)t.FindControl(strControlID);
if(dtTemp.Rows[i]["ReadOnly"].ToString() == "1")
{
TempControl.ReadOnly = true;
}
break;
}
}
写一个方法比如public bool Opini(username,1111)
{
if (username满足)
{
return true;
}
else
{
return false;
}
}
然后调用这个方法
if( Opini)
{
显示,编辑等可用
}
else
{
不可用
}
并且在load时也可以用这个方法,判断是否可见,可用整个页面,以后有关权限都可以调用他来设置
这只是我的小建议
而每个页面文件都有相应的一个....文本文件,(或INI文件,XML文件均可..)
文件内容则是:该页面所有控件的 控件名称->可见(Y/N)->可写(Y/N)
```````````````````````````````
自己写方法,读取...类中有方法:SetControl()
具体作用则是:
(记得要用在地址栏上保存COOK那样,省得有人禁用COOK了)检查用户的类型,(游客,普通用户,管理员..等..)..再读取相应的权限文件,,确定当前用户所具权限.最后调用 SetControl(UserType,PageUrl)
UserType即是自定义类型.
PageUrl即当前页面地址,(也即文件名称..比如: userlist.aspx ,,或者,直接在SetControl类中直接写方法,自动获得当前页面地址,截得 完整的文件名称.)根据相应文件内容,循环页面所有控件,同时对应文件内所写,各控件的可见可写属性...赋给各控件..===========================罗里罗索的半天,前期工作做好,
后来就是做好页面,再做一个,控件属性的文件..
最后,在页面中,load里调用,UserSecu.SetControl()方法即可...