Esempio n. 1
0
        public async Task <LoginResult> Login(string userName, string password)
        {
            LoginResult result        = null;
            var         encryptedPass = MD5Encoding(password);
            var         user          = await userRepository.ValidateUser(userName, encryptedPass);

            if (user == null)
            {
                throw new BadRequestException("Invalid credential!");
            }
            var urm = await urmRepository.GetUrmByUserId(user.Id);

            if (urm == null)
            {
                throw new BadRequestException("No active role for this user!");
            }
            var role = roleRepository.GetById(urm.RoleId);

            if (role == null)
            {
                throw new InternalException("Invalid user role data!");
            }

            IQueryable <Permission> permissions = permissionRepository.GetAllByRoleId(role.Id);

            if (permissions == null)
            {
                throw new BadRequestException("No active permission for this user!");
            }
            var resources     = new List <Resource>();
            var resourceNames = new List <string>();

            permissions.ToList().ForEach(p => {
                var resource = resourceRepository.GetById(p.ResourceId);
                if (resource == null)
                {
                    throw new BadRequestException("No active permission for this user!");
                }
                resources.Add(resource);
                resourceNames.Add(resource.Name);
            });

            var token = tokenService.CreateToken(user.Id.ToString(), userName, role.Name, resourceNames.ToArray());

            result          = new LoginResult();
            result.Token    = token;
            result.Role     = role.Name;
            result.User     = user;
            result.Resource = resourceNames.ToArray();

            return(result);
        }
        public async Task <bool> IsAuthorized(string userId, string[] resources)
        {
            var isAuthorized = false;

            try
            {
                var id  = new Guid(userId);
                var urm = await urmRepository.GetUrmByUserId(id);

                if (urm != null)
                {
                    var role = roleRepository.GetById(urm.RoleId);
                    if (role != null)
                    {
                        IQueryable <Permission> permissions = permissionRepository.GetAllByRoleId(role.Id);
                        if (permissions != null)
                        {
                            permissions.ToList().ForEach(p =>
                            {
                                var resource = resourceRepository.GetById(p.ResourceId);
                                if (resources.Any(r => r.Trim() == resource.Name.Trim()))
                                {
                                    isAuthorized = true;
                                }
                            });
                        }
                    }
                }
            }
            catch (Exception e)
            {
                logger.LogCritical(403, e, e.Message);
            }

            return(isAuthorized);
        }