通过全局变量设置权限的问题?

lqhly 2008-11-05 04:34:52
我有一个程序管理系统为web网页方式的,需给每个登录的用户设置权限,权限的设置是在数据库中的,如某字段为true则有此权限,为false则无此权限,当某用户登录时,需先从数据库中提取出该用户的权限,如‘添加’权限(数据库字段为tj),我的方法是要先赋值给一个全局变量tj,tj = Convert.ToBoolean(dr1["tj"].ToString());
在程序中先要根据此权限判断一下:
if (tj == false)
{
Response.Write("<script>alert('" + "该用户没有添加的权限!" + "');</script>");
}
else
{
BindZbData();
}
系统经常出现这样的问题:当具有该权限的某用户刚登录时,可以添加,但过一会再添加时,就提示"该用户没有添加的权限!" ,
造成这种错误的原因是不是因为权限是用全局变量控制的,当多个用户同时登录时,会改变这个全局变量tj,那么求助各位高手用什么方法来控制这个权限变量呢?
...全文
183 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
lqhly 2008-11-06
  • 打赏
  • 举报
回复
谢谢各位,解决了,主要是格式搞错了,应该为:
if (bool.Parse(Session["tj"].ToString()) == false)
zlb789 2008-11-05
  • 打赏
  • 举报
回复
直接用session 保存 或者干脆绑定一个用户对象 里面包括 用户信息 和权限
mjjzg 2008-11-05
  • 打赏
  • 举报
回复
为什么不在登陆时通过用户名来判断相应所应该有的权限是什么,将用户的权限用session/cookie存起来,当用到时再进行判断是否有权限
或者在登陆时就通过权限给用户提供他能执行的操作,不能执行的操作就隐藏不显示
killer_liqiao 2008-11-05
  • 打赏
  • 举报
回复
...
deansroom 2008-11-05
  • 打赏
  • 举报
回复
搞清楚几个概念
1 session/cookie
2 数据类型的转换
3 实例化对象和静态对象
4 对象的生存周期(变量,静态变量,session/cookie)
你会发现你的问题很简单
mjjzg 2008-11-05
  • 打赏
  • 举报
回复
路过,顶一下,以表支持
zccmy22 2008-11-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 luoyinshuang 的回复:]
你这样好象是不可靠吧。
可以用Session cookie或页面参数来传递用户信息,再用一个类根据该用户信息的某个值来判断是否有权限。
进入任何页面时,都将这个类作为父类加进去,强制判断。
[/Quote]

还不是一样,Session是B/s开发常用的对像。不可忽视,哪果LZ的访问题不是很同,Session的内容也不是很多的话,怎么不用,也是好东东吗?呵。

分析一下你的原因,.net页面在提交数据页面刷新后,即是Postback时,服务器组件数据会回传,页面可以得到数据,而我们页面定义的变量,的周期即从页面初始化到页面刷新,所以出现你说的情况就是,变量值在页面回传 后不存在了。解决方法很多,Session cookie ,可以推荐用一下viewstate每一次页面加载时把你的数据放到这里面,当postback时再读一遍。或者为了省资源,你在页面放一下隐藏服务控件,在每次加载时都对控件给个值。呵,具体需求看你的情况而定了。
SHIMMER8711 2008-11-05
  • 打赏
  • 举报
回复
刚做过类似的东西,我用的是cookie来保存权限值,然后把这个权限值当做全局变量,就没有这个问题
lqhly 2008-11-05
  • 打赏
  • 举报
回复
session的方法我也试了,但不知道如何把session变成bool,我是这样赋值的:
Session["tj"] = dr1["tj"].ToString();
条件判断为: if (bool.Parse(Session["tj"]) == false)但是错误提示为:
CS1502: 与“bool.Parse(string)”最匹配的重载方法具有一些无效参数,怎么办?
不好意思,上一句if (bool.Parse(Session["tj"] == false)少了个")",但错误提示依旧。
怎么该才能正确?
lqhly 2008-11-05
  • 打赏
  • 举报
回复
session的方法我也试了,但不知道如何把session变成bool,我是这样赋值的:
Session["tj"] = dr1["tj"].ToString();
条件判断为: if (bool.Parse(Session["tj"] == false)但是错误提示为:
CS1502: 与“bool.Parse(string)”最匹配的重载方法具有一些无效参数,怎么办?
Code従業員 2008-11-05
  • 打赏
  • 举报
回复
全局变量要到程序结束才得到释放,占着内存碍眼,

用一次查一次,这个在一些缴费网站比较明显。

达到数据库和程序即时同步很重要。
Code従業員 2008-11-05
  • 打赏
  • 举报
回复
怎么这样做呢?

比较合理的方法是,当点击添加内容的时候,去数据库查询这个用户有没有权限;

一般不推荐用全局变量。
liuxiao_a_boy 2008-11-05
  • 打赏
  • 举报
回复
如果找不出原因,建议把权限放在session里面,需要的时候直接读取。这样是肯定不会出问题的。
allen_feng 2008-11-05
  • 打赏
  • 举报
回复
你用键值对,结构,集合都可以哈,把用户名和权限都添加进去,调用时进行对
liuxiao_a_boy 2008-11-05
  • 打赏
  • 举报
回复
只要那个保存权限的变量不是静态的,就不会发生这样的事情,你还是去代码的其他地方看看哪里改变了变量的值了吧。
lqhly 2008-11-05
  • 打赏
  • 举报
回复
to louyinshuang:我很菜,请给出具体代码
qinhl99 2008-11-05
  • 打赏
  • 举报
回复
造成这种错误的原因是不是因为权限是用全局变量控制的,当多个用户同时登录时,会改变这个全局变量tj,那么求助各位高手用什么方法来控制这个权限变量呢?
//你自己都知道原因了吧!哈哈
luoyinshuang 2008-11-05
  • 打赏
  • 举报
回复
你这样好象是不可靠吧。
可以用Session cookie或页面参数来传递用户信息,再用一个类根据该用户信息的某个值来判断是否有权限。
进入任何页面时,都将这个类作为父类加进去,强制判断。
crhan 2008-11-05
  • 打赏
  • 举报
回复
用户的全局变量tj的定义改成



public bool tj
{
get
{
try{
return (bool)session["SS_TJ"];
}
catch{
return false;
}
}
set
{
session["SS_TJ"] = value;
}
}

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧