/// <summary> /// 某个用户是否有相应的操作权限 /// </summary> /// <param name="userInfo">用户</param> /// <param name="userId">用户主键</param> /// <param name="permissionCode">权限编号</param> /// <param name="permissionName">权限名称</param> /// <returns>是否有权限</returns> public bool IsAuthorized(BaseUserInfo userInfo, string userId, string permissionCode, string permissionName = null) { bool result = false; var parameter = ServiceInfo.Create(userInfo, MethodBase.GetCurrentMethod()); ServiceUtil.ProcessUserCenterReadDb(userInfo, parameter, (dbHelper) => { if (string.IsNullOrEmpty(userId)) { userId = userInfo.Id; } #if (!DEBUG) // 是超级管理员,就不用继续判断权限了 // var userManager = new BaseUserManager(result); // result = userManager.IsAdministrator(userId); #endif if (!result) { var permissionManager = new BasePermissionManager(userInfo); result = permissionManager.IsAuthorized(userInfo.SystemCode, userId, permissionCode, permissionName); // BaseLogManager.Instance.Add(result, this.serviceName, AppMessage.PermissionService_IsAuthorized, MethodBase.GetCurrentMethod()); } }); return(result); }
public static bool IsAuthorizedByCache(string systemCode, string userId, string permissionCode) { bool result = false; using (var redisReadOnlyClient = PooledRedisHelper.GetPermissionReadOnlyClient()) { // 2016-02-18 吉日嘎拉 这样可以刷新用户权限时,可以把一个用户的权限全去掉。 string hashId = "User:IsAuthorized:" + userId; string key = systemCode + ":" + permissionCode; // 若是缓存里过期了? if (redisReadOnlyClient.HashContainsEntry(hashId, key)) { string isAuthorized = redisReadOnlyClient.GetValueFromHash(hashId, key); result = isAuthorized.Equals(true.ToString()); } else { BasePermissionManager permissionManager = new BasePermissionManager(); result = permissionManager.IsAuthorized(systemCode, userId, permissionCode); #if ReadOnlyRedis using (var redisClient = PooledRedisHelper.GetPermissionClient()) { redisClient.SetEntryInHash(hashId, key, result.ToString()); redisClient.ExpireEntryAt(hashId, DateTime.Now.AddMinutes(20)); } #else redisReadOnlyClient.SetEntryInHash(hashId, key, result.ToString()); redisReadOnlyClient.ExpireEntryAt(hashId, DateTime.Now.AddMinutes(20)); #endif } } return(result); }