About IBS Portal
IBS Portal真是经典的范例,实在值得好好研究。看看这两个Method:
//********************************************************************* // // PortalSecurity.IsInRole() Method // // The IsInRole method enables developers to easily check the role // status of the current browser client. // //********************************************************************* public static bool IsInRole(String role) { return HttpContext.Current.User.IsInRole(role); } //********************************************************************* // // PortalSecurity.IsInRoles() Method // // The IsInRoles method enables developers to easily check the role // status of the current browser client against an array of roles // //********************************************************************* public static bool IsInRoles(String roles) { HttpContext context = HttpContext.Current; foreach (String role in roles.Split( new char[] {';'} )) { if (role != "" && role != null && ((role == "All Users") || (context.User.IsInRole(role)))) { return true; } } return false; }
评论
这两方法写的的确不错,但是有不好的地方。
<br>比如BAN了此帐号,如果还在登陆中的话,帐号一切功能都正常,要等他退出以后,重新登陆才会起作用。
<br>
<br>如果他不幸选择了保留Cookies,那就完蛋了,这俩方法根本不能控制……所以我把他们改造了,HOHO
这个问题可以解决的,在BAN帐号的时候,同时把权限去掉就可以了。
这觉得这样更简单:MyRole是个事先定义的Enum (我觉得Split会很慢)
<br>
<br> public bool IsInRole(params SchRole[] roles)
<br> {
<br> foreach(MyRole role in roles)
<br> {
<br> if (roleList.Contains( role.ToString() ))
<br> return true;
<br> }
<br> return false;
<br> }
<br>
留下您的评论