1 // ----------------------------------------------------------------- 2 // All Rights Reserved , Copyright (C) 2012 , Hairihan TECH, Ltd . 3 // ----------------------------------------------------------------- 4 5 using System;
6 using System.Collections.Generic;
7 using System.Linq;
8 using System.Web;
9 10 using DotNet.Business;
11 12 /// <remarks> 13 /// BasePage 14 /// 基础网页类 15 /// 16 /// 修改纪录 17 /// 18 /// 版本:1.0 2012.11.10 JiRiGaLa 整理代码。 19 /// 20 /// 版本:1.0 21 /// <author> 22 /// <name> JiRiGaLa </name> 23 /// <date> 2012.11.10 </date> 24 /// </author> 25 /// </remarks> 26 public partial class BasePage : System.Web.UI.Page
27 {
28 /// <summary> 29 /// 用户锁 30 /// </summary> 31 public static readonly object UserLock =
new object();
32 33 #region 常用操作权限项定义
34 35 /// <summary> 36 /// 访问权限 37 /// </summary> 38 protected bool permissionAccess =
true;
39 40 /// <summary> 41 /// 新增权限 42 /// </summary> 43 protected bool permissionAdd =
true;
44 45 /// <summary> 46 /// 编辑权限 47 /// </summary> 48 protected bool permissionEdit =
true;
49 50 /// <summary> 51 /// 删除权限 52 /// </summary> 53 protected bool permissionDelete =
true;
54 55 /// <summary> 56 /// 查询权限 57 /// </summary> 58 protected bool permissionSearch =
true;
59 60 /// <summary> 61 /// 管理权限 62 /// </summary> 63 protected bool permissionAdmin =
false;
64 65 /// <summary> 66 /// 导出权限 67 /// </summary> 68 protected bool permissionExport =
true;
69 70 /// <summary> 71 /// 导入权限 72 /// </summary> 73 protected bool permissionImport =
true;
74 75 /// <summary> 76 /// 打印权限 77 /// </summary> 78 protected bool permissionPrint =
true;
79 80 #endregion 81 82 // 用户是否在某个角色里(按编号,按名称的) 83 84 #region public bool UserIsInRole(string roleCode)
85 /// <summary> 86 /// 用户是否在某个角色里 87 /// </summary> 88 /// <param name="roleCode"> 角色编号 </param> 89 /// <returns> 是否在某个角色里 </returns> 90 public bool UserIsInRole(
string roleCode)
91 {
92 BaseUserManager userManager =
new BaseUserManager(
this.UserCenterDbHelper, userInfo);
93 return userManager.IsInRoleByCode(
this.UserInfo.Id, roleCode);
94 }
95 #endregion 96 97 // 用户操作权限常用判断函数 98 99 #region public void Authorized(string permissionItemCode, string accessDenyUrl = null) 是否有相应权限,同时若没权限会重新定位到某个页面
100 /// <summary> 101 /// 是否有相应权限,同时若没权限会重新定位到某个页面 102 /// </summary> 103 /// <param name="permissionItemCode"> 权限编号 </param> 104 /// <param name="accessDenyUrl"> 访问被阻止的url </param> 105 public void Authorized(
string permissionItemCode,
string accessDenyUrl =
null)
106 {
107 // 若没有相应的权限,那就跳转到没有权限的页面里 108 if (!Utilities.UserIsLogOn() || !IsAuthorized(permissionItemCode))
109 {
110 if (!
string.IsNullOrEmpty(accessDenyUrl))
111 {
112 HttpContext.Current.Response.Redirect(accessDenyUrl);
113 }
114 else 115 {
116 HttpContext.Current.Response.Redirect(Utilities.AccessDenyPage +
" ?PermissionItemCode= " + permissionItemCode);
117 }
118 }
119 }
120 #endregion 121 122 #region public bool IsAuthorized(string permissionItemCode, string permissionItemName = null) 是否有相应的权限
123 /// <summary> 124 /// 是否有相应的权限 125 /// </summary> 126 /// <param name="permissionItemCode"> 权限编号 </param> 127 /// <returns> 是否有权限 </returns> 128 public bool IsAuthorized(
string permissionItemCode,
string permissionItemName =
null)
129 {
130 return IsAuthorized(
this.UserInfo.Id, permissionItemCode, permissionItemName);
131 }
132 133 public bool IsAuthorized(
string userId,
string permissionItemCode,
string permissionItemName =
null)
134 {
135 // 是否从服务器缓存读取用户权限 136 bool fromCache =
true;
137 if (fromCache)
138 {
139 // 这里也可以优化一下,没必要遍历所有的操作权限列表 140 int count =
this.PermissionItemList.Count(entity => !
string.IsNullOrEmpty(entity.Code) && entity.Code.Equals(permissionItemCode, StringComparison.OrdinalIgnoreCase));
141 return count >
0;
142 }
143 // 实时从数据库读取操作权限的设置方法 144 DotNetService dotNetService =
new DotNetService();
145 return dotNetService.PermissionService.IsAuthorizedByUser(
this.UserInfo, userId, permissionItemCode, permissionItemName);
146 }
147 #endregion 148 149 #region protected void GetPermissionItemList() 获用户拥有的操作权限列表
150 /// <summary> 151 /// 获用户拥有的操作权限列表 152 /// </summary> 153 protected void GetPermissionItemList()
154 {
155 // 这里是控制用户并发的,减少框架等重复读取数据库的效率问题 156 lock (BasePage.UserLock)
157 {
158 string cacheKey =
" P " +
this.UserInfo.Id;
159 if (HttpContext.Current.Session ==
null || Cache[cacheKey] ==
null)
160 {
161 // 这个是默认的系统表名称 162 DotNetService dotNetService =
new DotNetService();
163 PermissionItemList = dotNetService.PermissionService.GetPermissionItemListByUser(
this.UserInfo,
this.UserInfo.Id);
164 }
165 }
166 }
167 #endregion 168 169 #region protected List<BasePermissionItemEntity> PermissionItemList 获用户拥有的操作权限列表
170 /// <summary> 171 /// 获用户拥有的操作权限列表 172 /// </summary> 173 protected List<BasePermissionItemEntity> PermissionItemList
174 {
175 get 176 {
177 lock (BasePage.UserLock)
178 {
179 // 这里进行了操作权限优化,出错问题 180 this.GetPermissionItemList();
181 }
182 string cacheKey =
" P " +
this.UserInfo.Id;
183 return Cache[cacheKey]
as List<BasePermissionItemEntity>;
184 }
185 set 186 {
187 string cacheKey =
" P " +
this.UserInfo.Id;
188 Cache[cacheKey] = value;
189 }
190 }
191 #endregion 192 193 // 用户模块菜单权限判断常用函数 194 195 #region public void ModuleAuthorized(string moduleCode, string accessDenyUrl = null) 是否有相应的模块权限,同时若没权限会重新定位到某个页面
196 /// <summary> 197 /// 是否有相应的模块权限,同时若没权限会重新定位到某个页面 198 /// </summary> 199 /// <param name="moduleCode"> 模块编号 </param> 200 /// <param name="accessDenyUrl"> 访问被阻止的url </param> 201 public void ModuleAuthorized(
string moduleCode,
string accessDenyUrl =
null)
202 {
203 // 若没有相应的权限,那就跳转到没有权限的页面里 204 if (!Utilities.UserIsLogOn() || !IsModuleAuthorized(moduleCode))
205 {
206 if (!
string.IsNullOrEmpty(accessDenyUrl))
207 {
208 HttpContext.Current.Response.Redirect(accessDenyUrl);
209 }
210 else 211 {
212 HttpContext.Current.Response.Redirect(Utilities.AccessDenyPage +
" ?ModuleCode= " + moduleCode);
213 }
214 }
215 }
216 #endregion 217 218 #region public bool IsModuleAuthorized(string moduleCode) 是否有相应的模块权限
219 /// <summary> 220 /// 是否有相应的模块权限 221 /// </summary> 222 /// <param name="moduleCode"> 模块编号 </param> 223 /// <returns> 是否有权限 </returns> 224 public bool IsModuleAuthorized(
string moduleCode)
225 {
226 if (
this.UserInfo.IsAdministrator)
227 {
228 return true;
229 }
230 // 这里也可以优化一下,没必要遍历所有的模块列表 231 int count =
this.ModuleList.Count(entity => !
string.IsNullOrEmpty(entity.Code) && entity.Code.Equals(moduleCode, StringComparison.OrdinalIgnoreCase));
232 return count >
0;
233 }
234 #endregion 235 236 #region protected void GetModuleList() 获用户有访问权限的模块列表
237 /// <summary> 238 /// 获用户有访问权限的模块列表 239 /// </summary> 240 protected void GetModuleList()
241 {
242 // 这里是控制用户并发的,减少框架等重复读取数据库的效率问题 243 lock (BasePage.UserLock)
244 {
245 string cacheKey =
" M " +
this.UserInfo.Id;
246 if (HttpContext.Current.Session ==
null || Cache[cacheKey] ==
null)
247 {
248 // 这个是默认的系统表名称 249 DotNetService dotNetService =
new DotNetService();
250 ModuleList = dotNetService.PermissionService.GetModuleListByUser(
this.UserInfo,
this.UserInfo.Id);
251 }
252 }
253 }
254 #endregion 255 256 #region protected List<BaseModuleEntity> ModuleList 获用户有访问权限的模块列表
257 /// <summary> 258 /// 获用户有访问权限的模块列表 259 /// </summary> 260 protected List<BaseModuleEntity> ModuleList
261 {
262 get 263 {
264 lock (BasePage.UserLock)
265 {
266 // 这里进行了菜单优化,出错问题 267 this.GetModuleList();
268 }
269 string cacheKey =
" M " +
this.UserInfo.Id;
270 // return Utilities.GetFromSession("UserModuleList") as List<BaseModuleEntity>; 271 return Cache[cacheKey]
as List<BaseModuleEntity>;
272 }
273 set 274 {
275 string cacheKey =
" M " +
this.UserInfo.Id;
276 Cache[cacheKey] = value;
277 // Utilities.AddSession("UserModuleList", value); 278 }
279 }
280 #endregion 281 }