public ServiceResponse <LoginResultModel> CheckLogin(LoginModel model) { var isMobile = model.IsMobile; string decPassword; try { //Client'dan encrypted olarak gelen Password Decrypt edilir. //Example Password: vbt123456 ==> dmJ0MTIzNDU2 decPassword = _encryptionService.DecryptFromClientData(model.Password); } catch { string message = "Şifre işleminde bir problem yaşandı lütfen teknik destek alın."; if (isMobile) { message = "Lütfen mağazadan uygulamanın yeni versiyonunu indiriniz."; } var response = new ServiceResponse <LoginResultModel>(null); response.Entity = new LoginResultModel { UserId = -2, ExceptionMessage = message }; return(response); } var user = IsValidUserAndPasswordCombination(model.UserName, decPassword); if (user != null) { //Eğer Mobil ise if (model.IsMobile && !string.IsNullOrEmpty(model.UnqDeviceId)) { var loginedCount = (decimal)_redisCacheService.Count($"{user.Id}*"); //Aynı account ile En Fazla 2 Mobile Cihazın Girilmesine İzin Verilir. if (loginedCount >= 2) { //Mobilden Login Olunmuş ise RefreshToken Her zaman Alınır (true) var controlCacheKey = _redisCacheService.GetTokenKey(user.Id, isMobile, true, model.UnqDeviceId); var controlKey = _redisCacheService.Get <string>(controlCacheKey); if (string.IsNullOrEmpty(controlKey)) { var response2 = new ServiceResponse <LoginResultModel>(null); response2.Entity = new LoginResultModel { UserId = -1, ExceptionMessage = "En fazla 2 farklı mobil cihazdan giriş yapabilirsiniz." }; return(response2); } } } //User Session'a Atılabilir. Sonradan Kullanmak için. ////3.1'de Destek Yok. HttpContext.Session.SetObject("User", user); var loginResultModel = new LoginResultModel { UserName = user.UserName, Name = user.Name, UserId = user.Id, }; //Token var(encToken, decToken) = _encryptionService.GenerateToken(user.Email); loginResultModel.Token = encToken; var createTime = DateTime.Now; var cacheKey = _redisCacheService.GetTokenKey(user.Id, isMobile, false, model.UnqDeviceId); _redisCacheService.Set(cacheKey, decToken, createTime.AddMinutes(_coreContext.TokenExpireTime));// 1 saatlik Token Açık Atılır. DateTime tokenExpireTime = createTime.AddMinutes(_coreContext.RefreshTokenExpireTime); if (isMobile) { tokenExpireTime = createTime.AddMinutes(_coreContext.MobileRefreshTokenExpireTime); //tokenExpireTime = createTime.AddDays(365); } //RefreshToken var refreshToken = _encryptionService.GenerateToken(user.Email); loginResultModel.RefreshToken = refreshToken.encToken; _redisCacheService.Set(_redisCacheService.GetTokenKey(user.Id, isMobile, true, model.UnqDeviceId), refreshToken.decToken, tokenExpireTime); loginResultModel.CreatedTokenTime = createTime.GetTotalMilliSeconds(); var response = new ServiceResponse <LoginResultModel>(null); response.Entity = loginResultModel; return(response); } else { var loginResultModel = new LoginResultModel(); var response = new ServiceResponse <LoginResultModel>(null); response.Entity = loginResultModel; return(response); } }
public void OnActionExecuting(ActionExecutingContext context) { //Kontrol edilmesi gereken bir Action mı ? Mesela Login için bu işlem yapılmaz! if (HasIgnoreAttribute(context)) { return; } bool.TryParse(context.HttpContext.Request.Headers["IsMobile"].FirstOrDefault(), out var isMobile); int.TryParse(context.HttpContext.Request.Headers["UserId"].FirstOrDefault(), out var userId); //Mobile için var unqDeviceId = context.HttpContext.Request.Headers["UnqDeviceId"].FirstOrDefault(); //Tüm platformlar için gerekli kontrollerin yapılabilmesi için UserID şarttır. if (userId == 0) { context.Result = new UnauthorizedResult(); return; } //Genel Kullanılacak değişkenler burada atanır. _workContext.CurrentUserId = userId; _workContext.IsMobile = isMobile; //-------------------------------------- string authHeader = context.HttpContext.Request.Headers["Authorization"]; //Not: Bu durum sadece Web ortamı için geçerlidir. Mobilden her zaman Token gelmektedir. if (authHeader != null && authHeader.StartsWith("Bearer")) { //Extract credentials var token = authHeader.Substring("Bearer ".Length).TrimStart(); var decryptToken = _encryptionService.DecryptText(token); //Not: Bu durum sadece Web ortamı için geçerlidir. Mobilden her zaman Token gelmektedir. Hiçbir zaman timeout'a uğramaz. Tek fark 45 dakikadan büyük ise RefreshToken'da gönderilir. if (string.IsNullOrEmpty(decryptToken))// token yoksa UnauthorizedResult dönüyoruz. Bu sadece Web ortamı için geçerlidir. Mobilede her zaman Token dönülür. Gelmemiş ise ona da UnauthorizedResult dönülür. { context.Result = new UnauthorizedResult(); return; } //İlgili UserID'ye ait Token Redis'den alınır. var cacheRedistoken = _redisCacheService.Get <string>(_redisCacheService.GetTokenKey(userId, isMobile, false, unqDeviceId)); if (string.IsNullOrEmpty(cacheRedistoken) && isMobile) // Redis'de Token Key yok ise , bu durum SADECE MOBILE'DE BAKILMALIDIR. { //Refresh Token kontrolü yapılır. CreateTokensByCheckRefreshToken(context, true); //true'nun amacı context.Result = new UnauthorizedResult() dönüşünün yapılmasının istenmesidir. #region CreateTokensByCheckRefreshToken Methodu Altına Taşındı. //if (context.HttpContext.Request.Headers["RefreshToken"].FirstOrDefault() != null) // client refresh token göndermiş. //{ // var clientRefreshToken = context.HttpContext.Request.Headers["RefreshToken"].FirstOrDefault(); // var redisRefreshToken = _redisCacheService.Get<string>(_redisCacheService.GetTokenKey(userId, isMobile, true, unqDeviceId)); // if (string.IsNullOrEmpty(redisRefreshToken))//rediste refresh token yok // { // context.Result = new UnauthorizedResult(); // return; // } // var decClientRefreshToken = _encryptionService.DecryptText(clientRefreshToken); // if (decClientRefreshToken == redisRefreshToken)//Refresh Token doğru. Yeni token ve refresh token üretip dönelim. // { // UserModel user = _userService.GetById(userId).Entity; // var (encToken, decToken) = _encryptionService.GenerateToken(user.Email); // //Oluşturulsn Token Redis'e atılır. // var createTime = DateTime.Now; // //Token Oluşturulur. Mobilde ve Web'de 1 saattir. appsettings.json'a bakınız. // DateTime tokenExpireTime = createTime.AddMinutes(_coreContext.TokenExpireTime); // _redisCacheService.Set(_redisCacheService.GetTokenKey(userId, isMobile, false, unqDeviceId), decToken, tokenExpireTime); // //Geri dönülecek Encrypt Token ve Yaratılma zamanı Client'ın Header'ına atanır // context.HttpContext.Items["token"] = encToken; // context.HttpContext.Items["createdTokenTime"] = createTime.GetTotalMilliSeconds(); // //RefreshToken Oluşturulur. // //Refresh Token Mobilde 1 Yıl, Web'de 1.5 saattir. appsettings.json'a bakınız. // var refreshToken = GenerateRefreshToken(user, context, unqDeviceId, isMobile); // if (!string.IsNullOrWhiteSpace(refreshToken)) // { // //Oluşturulan RefreshToken Client'a dönülür. // context.HttpContext.Items["refreshToken"] = refreshToken; // } // } // else // { // context.Result = new UnauthorizedResult(); // return; // } //} //else //{ // context.Result = new UnauthorizedResult(); // return; //} #endregion } else if ((string.IsNullOrEmpty(cacheRedistoken)) || (!string.IsNullOrEmpty(cacheRedistoken) && cacheRedistoken.Trim() != decryptToken.Trim())) //Redis'de Token Yok Ya da Redis'de Token Var ama tokenlar eşit değil , geçerli bir oturum isteği değil. { context.Result = new UnauthorizedResult(); return; } //Redis'in süresine bakılacak var tokenSession = decryptToken.Split('ß')[2]; var sessionCreateTime = DateTime.Parse(tokenSession); var remainingTime = DateTime.Now - sessionCreateTime; //Tokenlar eşit , 45 ile 60'ıncı dakikalar arasındaysa token ve refresh token'ı yenileyip dönelim. Önemli Not: Redis Cache'de Token var ise! //if (remainingTime.TotalMinutes >= _coreContext.TokenExpireTime && remainingTime.TotalMinutes <= _coreContext.TokenExpireTime - 15) //if (remainingTime.TotalMinutes >= _coreContext.TokenExpireTime - 15 && remainingTime.TotalMinutes <= _coreContext.TokenExpireTime) if ((string.IsNullOrEmpty(cacheRedistoken) == false) && (remainingTime.TotalMinutes >= _coreContext.TokenExpireTime - 15 && remainingTime.TotalMinutes <= _coreContext.TokenExpireTime)) { CreateTokensByCheckRefreshToken(context); #region CreateTokensByCheckRefreshToken Methodu Altına Taşındı. //if (context.HttpContext.Request.Headers["RefreshToken"].FirstOrDefault() != null) // client refresh token göndermiş. //{ // var clientRefreshToken = context.HttpContext.Request.Headers["RefreshToken"].FirstOrDefault(); // var redisRefreshToken = _redisCacheService.Get<string>(_redisCacheService.GetTokenKey(userId, isMobile, true, unqDeviceId)); // if (string.IsNullOrEmpty(redisRefreshToken))//rediste refresh token yok // { // context.Result = new UnauthorizedResult(); // return; // } // var decClientRefreshToken = _encryptionService.DecryptText(clientRefreshToken); // if (decClientRefreshToken == redisRefreshToken)//Refresh Token doğru. Yeni token ve refresh token üretip dönelim. // { // UserModel user = _userService.GetById(userId).Entity; // var (encToken, decToken) = _encryptionService.GenerateToken(user.Email); // //Oluşturulan Token Redis'e atılır. // var createTime = DateTime.Now; // DateTime tokenExpireTime = createTime.AddMinutes(_coreContext.TokenExpireTime); // _redisCacheService.Set(_redisCacheService.GetTokenKey(userId, isMobile, false, unqDeviceId), decToken, tokenExpireTime); // //Geri dönülecek Encrypt Token ve Yaratılma zamanı Client'ın Header'ına atanır // context.HttpContext.Items["token"] = encToken; // context.HttpContext.Items["createdTokenTime"] = createTime.GetTotalMilliSeconds(); // //RefreshToken Oluşturulur. // //Refresh Token Mobilde 1 Yıl Web'de 1.5 saattir. appsettings.json'a bakınız. // var refreshToken = GenerateRefreshToken(user, context, unqDeviceId, isMobile); // if (!string.IsNullOrWhiteSpace(refreshToken)) // { // //Oluşturulan RefreshToken Client'a dönülür. // context.HttpContext.Items["refreshToken"] = refreshToken; // } // } //} #endregion } } else { context.Result = new UnauthorizedResult(); return; } //Log işlemleri if (HasLogAttribute(context)) { string action = (string)context.RouteData.Values["action"]; string controller = (string)context.RouteData.Values["controller"]; //Loglanacak Model Alınır foreach (ControllerParameterDescriptor param in context.ActionDescriptor.Parameters) { if (param.ParameterInfo.CustomAttributes.Any( attr => attr.AttributeType == typeof(FromBodyAttribute)) ) { var entity = context.ActionArguments[param.Name]; context.HttpContext.Items[userId + "_" + controller + "_" + action] = entity; } } //--------------------------------- } }
public void OnActionExecuting(ActionExecutingContext context) { try { //Kontrol edilmesi gereken bir Action mı ? Mesela Login için bu işlem yapılmaz! if (HasIgnoreAttribute(context)) { return; } //BeHalfOfToken and BeHalfOfUserId //Birinin Adına mı Girmiş! var beHalfOfUserId = context.HttpContext.Request.Headers["BeHalfOfUserId"].FirstOrDefault(); var beHalfOfToken = context.HttpContext.Request.Headers["BeHalfOfToken"].FirstOrDefault(); var beHalfOfPassword = context.HttpContext.Request.Headers["BeHalfOfPassword"].FirstOrDefault(); //beHalfOfUserId parametersi ZORUNLU olmadığı için, null ise "beHalfOfPassword" değerinden alınır. if (beHalfOfPassword != null && (beHalfOfUserId == null || int.Parse(beHalfOfUserId) == 0) && !string.IsNullOrEmpty(beHalfOfPassword)) { var decryptBeHalfOfPassword = _encryption.DecryptFromClientData(beHalfOfPassword); if (decryptBeHalfOfPassword.Split('@').Length > 1) { beHalfOfUserId = decryptBeHalfOfPassword.Split('@')[1]; } } bool.TryParse(context.HttpContext.Request.Headers["IsMobile"].FirstOrDefault(), out var isMobile); int.TryParse(context.HttpContext.Request.Headers["UserId"].FirstOrDefault(), out var userId); //Mobile için var unqDeviceId = context.HttpContext.Request.Headers["UnqDeviceId"].FirstOrDefault(); //Tüm platformlar için gerekli kontrollerin yapılabilmesi için UserID şarttır. //if (userId == 0) // Başkası Adına da Girmiş Olabilir (BeHalfOf) if (userId == 0 && int.Parse(beHalfOfUserId) == 0) { context.Result = new UnauthorizedResult(); return; } //Genel Kullanılacak değişkenler burada atanır. _workContext.CurrentUserId = userId; _workContext.IsMobile = isMobile; //-------------------------------------- //BeHalfOfUserId Global if (beHalfOfUserId != null && beHalfOfUserId != "" && int.Parse(beHalfOfUserId) > 0) { _workContext.CurrentBeHalfOfUserId = int.Parse(beHalfOfUserId); } //Set UserIsAdmin UserModel user = _userService.GetById(userId).Entity; if (user != null) { _workContext.IsAdmin = user.IsAdmin; } //--------------------- //BeHalfOfToken Check! Birisinin Adına Girmiş İse Onun Kuralları Geçerli Olur. if (beHalfOfToken != null && beHalfOfToken != "") { var decryptBeHalfOfToken = _encryption.DecryptText(beHalfOfToken); var decryptBeHalfOfPassword = _encryption.DecryptFromClientData(beHalfOfPassword); var cacheRedisbeHalfOfToken = _redisCacheService.Get <string>(_redisCacheService.GetTokenKeyForBeHalfOf(int.Parse(beHalfOfUserId), decryptBeHalfOfPassword)); //Başkasının yerine girdi ve bilgiler doğru değil ise devam edilmez. Geriya hata dönülür. if (string.IsNullOrEmpty(cacheRedisbeHalfOfToken) || (!string.IsNullOrEmpty(cacheRedisbeHalfOfToken) && cacheRedisbeHalfOfToken.Trim() != decryptBeHalfOfToken.Trim())) { context.Result = new ObjectResult(context.ModelState) { Value = _localizer["BeHalfofTokenException"], StatusCode = 431 }; return; } } else { //BeHalfOf Değil ise Token Kontrolü yapılır. string authHeader = context.HttpContext.Request.Headers["Authorization"]; //Not: Bu durum sadece Web ortamı için geçerlidir. Mobilden her zaman Token gelmektedir. if (authHeader != null && authHeader.StartsWith("Bearer")) { //Extract credentials var token = authHeader.Substring("Bearer ".Length).TrimStart(); var decryptToken = _encryption.DecryptText(token); //Not: Bu durum sadece Web ortamı için geçerlidir. Mobilden her zaman Token gelmektedir. Hiçbir zaman timeout'a uğramaz. Tek fark 45 dakikadan büyük ise RefreshToken'da gönderilir. if (string.IsNullOrEmpty(decryptToken))// token yoksa UnauthorizedResult dönüyoruz. Bu sadece Web ortamı için geçerlidir. Mobilede her zaman Token dönülür. Gelmemiş ise ona da UnauthorizedResult dönülür. { context.Result = new UnauthorizedResult(); return; } //İlgili UserID'ye ait Token Redis'den alınır. var cacheRedistoken = _redisCacheService.Get <string>(_redisCacheService.GetTokenKey(userId, isMobile, false, unqDeviceId)); if (string.IsNullOrEmpty(cacheRedistoken) && isMobile) // Redis'de Token Key yok ise , bu durum SADECE MOBILE'DE BAKILMALIDIR. { //Refresh Token kontrolü yapılır. CreateTokensByCheckRefreshToken(context, true); //true'nun amacı context.Result = new UnauthorizedResult() dönüşünün yapılmasının istenmesidir. #region CreateTokensByCheckRefreshToken Methodu Altına Taşındı. //if (context.HttpContext.Request.Headers["RefreshToken"].FirstOrDefault() != null) // client refresh token göndermiş. //{ // var clientRefreshToken = context.HttpContext.Request.Headers["RefreshToken"].FirstOrDefault(); // var redisRefreshToken = _redisCacheService.Get<string>(_redisCacheService.GetTokenKey(userId, isMobile, true, unqDeviceId)); // if (string.IsNullOrEmpty(redisRefreshToken))//rediste refresh token yok // { // context.Result = new UnauthorizedResult(); // return; // } // var decClientRefreshToken = _encryptionService.DecryptText(clientRefreshToken); // if (decClientRefreshToken == redisRefreshToken)//Refresh Token doğru. Yeni token ve refresh token üretip dönelim. // { // UserModel user = _userService.GetById(userId).Entity; // var (encToken, decToken) = _encryptionService.GenerateToken(user.Email); // //Oluşturulsn Token Redis'e atılır. // var createTime = DateTime.Now; // //Token Oluşturulur. Mobilde ve Web'de 1 saattir. appsettings.json'a bakınız. // DateTime tokenExpireTime = createTime.AddMinutes(_coreContext.TokenExpireTime); // _redisCacheService.Set(_redisCacheService.GetTokenKey(userId, isMobile, false, unqDeviceId), decToken, tokenExpireTime); // //Geri dönülecek Encrypt Token ve Yaratılma zamanı Client'ın Header'ına atanır // context.HttpContext.Items["token"] = encToken; // context.HttpContext.Items["createdTokenTime"] = createTime.GetTotalMilliSeconds(); // //RefreshToken Oluşturulur. // //Refresh Token Mobilde 1 Yıl, Web'de 1.5 saattir. appsettings.json'a bakınız. // var refreshToken = GenerateRefreshToken(user, context, unqDeviceId, isMobile); // if (!string.IsNullOrWhiteSpace(refreshToken)) // { // //Oluşturulan RefreshToken Client'a dönülür. // context.HttpContext.Items["refreshToken"] = refreshToken; // } // } // else // { // context.Result = new UnauthorizedResult(); // return; // } //} //else //{ // context.Result = new UnauthorizedResult(); // return; //} #endregion } else if ((string.IsNullOrEmpty(cacheRedistoken)) || (!string.IsNullOrEmpty(cacheRedistoken) && cacheRedistoken.Trim() != decryptToken.Trim())) //Redis'de Token Yok Ya da Redis'de Token Var ama tokenlar eşit değil , geçerli bir oturum isteği değil. { context.Result = new UnauthorizedResult(); return; } //Redis'in süresine bakılacak var tokenSession = decryptToken.Split('ß')[2]; var sessionCreateTime = DateTime.Parse(tokenSession); var remainingTime = DateTime.Now - sessionCreateTime; //Tokenlar eşit , 45 ile 60'ıncı dakikalar arasındaysa token ve refresh token'ı yenileyip dönelim. Önemli Not: Redis Cache'de Token var ise! //if (remainingTime.TotalMinutes >= _coreContext.TokenExpireTime && remainingTime.TotalMinutes <= _coreContext.TokenExpireTime - 15) //if (remainingTime.TotalMinutes >= _coreContext.TokenExpireTime - 15 && remainingTime.TotalMinutes <= _coreContext.TokenExpireTime) //1. KONTROL if ((string.IsNullOrEmpty(cacheRedistoken) == false) && (remainingTime.TotalMinutes >= _coreContext.TokenExpireTime - 15 && remainingTime.TotalMinutes <= _coreContext.TokenExpireTime)) { //------------CheckTime On Redis //İlgili UserID'ye ait Token Redis'den alınır. // cacheRedistoken = _redisCacheService.Get<string>(_redisCacheService.GetTokenKey(userId, isMobile, false, unqDeviceId)); // var redisToken = cacheRedistoken.Split('ß')[2]; // var redisTokenCreateTime = DateTime.Parse(redisToken); // var redisTokenTime = DateTime.Now - redisTokenCreateTime; //Bu 3. Kontrol oluyordu. Kaldırıldı. //------------End CheckTime on Redis //Check TimeOut 2. Time for Backend Redis! // if (redisTokenTime.TotalMinutes >= _coreContext.TokenExpireTime - 15) // { lock (lockObject) { //Double Check Lock With Redis Key! //İlgili UserID'ye ait Token Redis'den alınır. cacheRedistoken = _redisCacheService.Get <string>(_redisCacheService.GetTokenKey(userId, isMobile, false, unqDeviceId)); var redisToken = cacheRedistoken.Split('ß')[2]; var redisTokenCreateTime = DateTime.Parse(redisToken); var redisTokenTime = DateTime.Now - redisTokenCreateTime; //2.KONTROL Check Timeout 2. Time for Backend Redis! if (redisTokenTime.TotalMinutes >= _coreContext.TokenExpireTime - 15) { CreateTokensByCheckRefreshToken(context); } } // } #region CreateTokensByCheckRefreshToken Methodu Altına Taşındı. //if (context.HttpContext.Request.Headers["RefreshToken"].FirstOrDefault() != null) // client refresh token göndermiş. //{ // var clientRefreshToken = context.HttpContext.Request.Headers["RefreshToken"].FirstOrDefault(); // var redisRefreshToken = _redisCacheService.Get<string>(_redisCacheService.GetTokenKey(userId, isMobile, true, unqDeviceId)); // if (string.IsNullOrEmpty(redisRefreshToken))//rediste refresh token yok // { // context.Result = new UnauthorizedResult(); // return; // } // var decClientRefreshToken = _encryptionService.DecryptText(clientRefreshToken); // if (decClientRefreshToken == redisRefreshToken)//Refresh Token doğru. Yeni token ve refresh token üretip dönelim. // { // UserModel user = _userService.GetById(userId).Entity; // var (encToken, decToken) = _encryptionService.GenerateToken(user.Email); // //Oluşturulan Token Redis'e atılır. // var createTime = DateTime.Now; // DateTime tokenExpireTime = createTime.AddMinutes(_coreContext.TokenExpireTime); // _redisCacheService.Set(_redisCacheService.GetTokenKey(userId, isMobile, false, unqDeviceId), decToken, tokenExpireTime); // //Geri dönülecek Encrypt Token ve Yaratılma zamanı Client'ın Header'ına atanır // context.HttpContext.Items["token"] = encToken; // context.HttpContext.Items["createdTokenTime"] = createTime.GetTotalMilliSeconds(); // //RefreshToken Oluşturulur. // //Refresh Token Mobilde 1 Yıl Web'de 1.5 saattir. appsettings.json'a bakınız. // var refreshToken = GenerateRefreshToken(user, context, unqDeviceId, isMobile); // if (!string.IsNullOrWhiteSpace(refreshToken)) // { // //Oluşturulan RefreshToken Client'a dönülür. // context.HttpContext.Items["refreshToken"] = refreshToken; // } // } //} #endregion } } else { context.Result = new UnauthorizedResult(); return; } } //Role Yetkisine bakılır. //if (HasRoleAttribute(context) && !_workContext.IsAdmin) if (HasRoleAttribute(context) && ((beHalfOfUserId == null && !_workContext.IsAdmin) || (beHalfOfUserId != null))) { try { var arguments = ((ControllerActionDescriptor)context.ActionDescriptor).MethodInfo.CustomAttributes.FirstOrDefault(fd => fd.AttributeType == typeof(RoleAttribute)).ConstructorArguments; int roleGroupID = (int)arguments[0].Value; Int64 roleID = (Int64)arguments[1].Value; //BeHalfOfUserID değeri var ise o verilir. Yok ise client'ın UserID değeri alınır. int userIDprm = _workContext.CurrentBeHalfOfUserId != 0 ? _workContext.CurrentBeHalfOfUserId : userId; RoleModel role = _roleService.GetRoleById(userIDprm, roleGroupID, roleID).Entity; //RoleModel role = _roleService.GetRoleById(userId, roleGroupID, roleID).Entity; if (role.Id == 0) { //Forbidden 403 Result. Yetkiniz Yoktur.. context.Result = new ObjectResult(context.ModelState) { //Value = null, //Value = "You are not authorized for this page", Value = _localizer["Forbidden"], StatusCode = Microsoft.AspNetCore.Http.StatusCodes.Status403Forbidden }; return; } } catch { int i = 0; } } else if (HasAdminAttribute(context) && !_workContext.IsAdmin)//User'a Admin yetkisinin verilmesi ya da alınması yetkisine bakılır. { //Forbidden 403 Result. Yetkiniz Yoktur.. context.Result = new ObjectResult(context.ModelState) { //Value = null, //Value = "You are not Admin for this Action", Value = _localizer["ForbiddenAdmin"], StatusCode = Microsoft.AspNetCore.Http.StatusCodes.Status403Forbidden }; return; } else { int y = 0; } //Log işlemleri if (HasLogAttribute(context)) { string action = (string)context.RouteData.Values["action"]; string controller = (string)context.RouteData.Values["controller"]; //Loglanacak Model Alınır foreach (ControllerParameterDescriptor param in context.ActionDescriptor.Parameters) { if (param.ParameterInfo.CustomAttributes.Any( attr => attr.AttributeType == typeof(FromBodyAttribute)) ) { var entity = context.ActionArguments[param.Name]; //Burada BeHalhOfUserID'de kullanılabilir. context.HttpContext.Items[userId + "_" + controller + "_" + action] = entity; } } //--------------------------------- } } catch (InvalidTokenException ex) { //Forbidden 430 Result. Yetkiniz Yoktur.. context.Result = new ObjectResult(context.ModelState) { //Value = "Invalid Token Execption." + ex.Message, Value = _localizer["TokenException"] + ex.Message, StatusCode = 430 }; return; } }