예제 #1
0
 public Repository(IMiniSessionService manager = null)
 {
     _sessionManager = manager ?? ServiceLocator.Current.GetInstance <IMiniSessionService>();
     // Make sure the session is open
     _sessionManager.OpenSession();
     _currentSession = _sessionManager.Session;
 }
        private bool GetOperationsInner()
        {
            var w = System.Diagnostics.Stopwatch.StartNew();

            lock (_operationsLock)
            {
                if (_operationsDictionary != null)
                {
                    return(true);
                }
                _sessionService.OpenSession();
                // Load & Cache Operations
                var operations = _sessionService.Session.Query <ApplicationOperation>()
                                 .FetchMany(a => a.Permissions)
                                 .WithOptions(options =>
                {
                    options.SetCacheable(true);
                    options.SetCacheRegion("security");
                })
                                 .ToList();

                // ThereBeDragonsHere! - Hack to lazy initialize the Roles
                var roles = operations.SelectMany(o => o.Permissions.Select(p => p.Roles)).ToList();
                var localOperationsDictionary = new ConcurrentDictionary <string, List <ApplicationOperation> >();
                foreach (var operation in operations)
                {
                    var key = GetOperationDictionaryKey(operation);
                    if (!localOperationsDictionary.ContainsKey(key))
                    {
                        var list = new List <ApplicationOperation>
                        {
                            operation
                        };
                        localOperationsDictionary.TryAdd(key, list);
                    }
                    else
                    {
                        var list = localOperationsDictionary[key];
                        if (!list.Contains(operation))
                        {
                            list.Add(operation);
                        }
                    }
                }
                _operationsDictionary = localOperationsDictionary;
            }
            w.Stop();
            LogManager.GetLogger(GetType()).Debug($"Got all Operations/Permissions/Roles in {w.Elapsed}");
            return(true);
        }
        public IActionResult Token(AuthRequest authRequest)
        {
            using (var session = _manager.OpenSession())
            {
                var success = IdentityHelper.SignIn(authRequest.Username, authRequest.Password, false);

                ActionResult response = new EmptyResult();

                if (success == true)
                {
                    var userInfo = IdentityHelper.GetApplicationUserByName(authRequest.Username);

                    var claims = userInfo.Permissions.Select(p => new Claim(Model.ClaimTypes.Permission, p.Name)).ToList();
                    claims.Add(new Claim(ClaimTypes.Name, userInfo.UserName));
                    if (!string.IsNullOrWhiteSpace(userInfo.Email))
                    {
                        claims.Add(new Claim(Model.ClaimTypes.Email, userInfo.Email));
                    }
                    var userRoles = userInfo.Roles.Select(r => new Claim(ClaimTypes.Role, r.Name));
                    claims.AddRange(userRoles);

                    var key = EncodingUtilities.StringToByteArray(_jwtKey, "ascii");
                    var signingCredential = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature);
                    var tokenDescriptor   = new JwtSecurityToken(null, null, claims, expires: _jwtExpirationTime, signingCredentials: signingCredential);
                    var token             = new JwtSecurityTokenHandler().WriteToken(tokenDescriptor);

                    var result = new
                    {
                        idToken   = token,
                        expiresIn = tokenDescriptor.ValidTo,
                    };
                    response = Ok(result);
                }

                _manager.CloseSession();
                return(response);
            }
        }
예제 #4
0
 private ISession GetCurrentSession()
 {
     _sessionManager.OpenSession();
     return(_sessionManager.Session);
 }