Mam w swojej aplikacji chat który działa na zasadzie ze uzytkownik moze pisac tylko z użytkownikiem ktory jest jego znajomym. Chciałbym teraz zrobić aby zwykły użytkownik miał na licie kontaktów tylko userów z rola Admin, a admin zeby miał wszystkich uzytkownikow. Probowałem sam aczkolwiek nie uzyskałem pożadanego wyniku.

[HubName("echo")]
    public class EchoHub : Hub
    {

        public override Task OnConnected()
        {
            Db db = new Db();

            UserDTO userDTO = db.Users.Where(x => x.Username.Equals(Context.User.Identity.Name)).FirstOrDefault();
            int userId = userDTO.Id;

            string connId = Context.ConnectionId;

            if (! db.Online.Any(x => x.Id == userId))
            {
                OnlineDTO online = new OnlineDTO();

                online.Id = userId;
                online.ConnId = connId;

                db.Online.Add(online);

                db.SaveChanges();
            }

            List<int> onlineIds = db.Online.ToArray().Select(x => x.Id).ToList();


            List<int> friendIds1 = db.Friends.Where(x => x.User1 == userId && x.Active == true).ToArray().Select(x => x.User2).ToList();
            List<int> friendIds2 = db.Friends.Where(x => x.User2 == userId && x.Active == true).ToArray().Select(x => x.User1).ToList();

            List<int> allFriendsIds = friendIds1.Concat(friendIds2).ToList();


            List<int> resultList = onlineIds.Where((i) => allFriendsIds.Contains(i)).ToList();

            Dictionary<int, string> dictFriends = new Dictionary<int, string>();

            foreach (var id in resultList)
            {
                var users = db.Users.Find(id);
                string friend = users.Username;

                if (!dictFriends.ContainsKey(id))
                {
                    dictFriends.Add(id, friend);
                }
            }

            var transformed = from key in dictFriends.Keys
                              select new { id = key, friend = dictFriends[key] };

            string json = JsonConvert.SerializeObject(transformed);

            var clients = Clients.Caller;

            clients.getonlinefriends(Context.User.Identity.Name, json);

            UpdateChat();

            return base.OnConnected();
        }

        public override Task OnDisconnected(bool stopCalled)
        {
            Db db = new Db();

            UserDTO userDTO = db.Users.Where(x => x.Username.Equals(Context.User.Identity.Name)).FirstOrDefault();
            int userId = userDTO.Id;

            if (db.Online.Any(x => x.Id == userId))
            {
                OnlineDTO online = db.Online.Find(userId);
                db.Online.Remove(online);
                db.SaveChanges();
            }

            UpdateChat();
            return base.OnDisconnected(stopCalled);
        }

        public void UpdateChat()
        {
            Db db = new Db();

            List<int> onlineIds = db.Online.ToArray().Select(x => x.Id).ToList();

            foreach (var userId in onlineIds)
            {
                UserDTO user = db.Users.Find(userId);
                string username = user.Username;

                List<int> friendIds1 = db.Friends.Where(x => x.User1 == userId && x.Active == true).ToArray().Select(x => x.User2).ToList();

                List<int> friendIds2 = db.Friends.Where(x => x.User2 == userId && x.Active == true).ToArray().Select(x => x.User1).ToList();

                List<int> allFriendsIds = friendIds1.Concat(friendIds2).ToList();

                List<int> resultList = onlineIds.Where((i) => allFriendsIds.Contains(i)).ToList();

                Dictionary<int, string> dictFriends = new Dictionary<int, string>();

                foreach (var id in resultList)
                {
                    var users = db.Users.Find(id);
                    string friend = users.Username;

                    if (!dictFriends.ContainsKey(id))
                    {
                        dictFriends.Add(id, friend);
                    }
                }

                var transformed = from key in dictFriends.Keys
                                  select new { id = key, friend = dictFriends[key] };

                string json = JsonConvert.SerializeObject(transformed);

                var clients = Clients.All;

                clients.updatechat(username, json);
            }
        }

        public void SendChat(int friendId, string friendUsername, string message)
        {
            Db db = new Db();

            UserDTO userDTO = db.Users.Where(x => x.Username.Equals(Context.User.Identity.Name)).FirstOrDefault();
            int userId = userDTO.Id;

            var clients = Clients.All;

            clients.sendchat(userId, Context.User.Identity.Name, friendId, friendUsername, message);
        }
    }
}
<div class="chat @User.Identity.Name">
    <ul></ul>
</div>

@section Scripts {
    <script src="~/Scripts/jquery.signalR-2.1.2.min.js"></script>
    <script src="/signalr/hubs"></script>
    <script>
        $(document).ready(function () {

            /*
            / Hub
            */

            // Setup hub connection
            var hub = $.connection.echo;

            hub.client.getonlinefriends = function (user, data) {
                var result = JSON.parse(data);

                for (var i = 0; i < result.length; i++) {
                    var obj = result[i];

                    $(".chat." + user + "> ul").append('<li class="cf' + obj.id + '" data-id="' + obj.id + '"><img src="uploads/' + obj.id + '.jpg" /> ' + obj.friend + '</li>');

                    var chatbox = $("body > .chatbox").clone();

                    chatbox.attr("data-id", obj.id);
                    chatbox.attr("id", "cb" + obj.id);
                    chatbox.addClass("hidden");

                    chatbox.find("a.sendchat").attr("data-friend", obj.friend);
                    chatbox.find("a.sendchat").attr("data-id", obj.id);
                    chatbox.find("div.chatboxtext").attr("id", "cbtext" + obj.id);

                    $("#chb" + user).append(chatbox);
                    $("#chb" + user + " #cb" + obj.id + " h4 > span").html('<img src="uploads/' + obj.id + '.jpg" />');
                }
            }

            hub.client.updatechat = function (user, data) {
                var result = JSON.parse(data);

                $(".chat." + user + "> ul").empty();

                for (var i = 0; i < result.length; i++) {
                    var obj = result[i];

                    $(".chat." + user + "> ul").append('<li class="cf' + obj.id + '" data-id="' + obj.id + '"><img src="uploads/' + obj.id + '.jpg" /> ' + obj.friend + '</li>');

                    if (!($(".chatboxholder #cb" + obj.id).length)) {

                        var chatbox = $("body > .chatbox").clone();

                        chatbox.attr("data-id", obj.id);
                        chatbox.attr("id", "cb" + obj.id);
                        chatbox.addClass("hidden");

                        chatbox.find("a.sendchat").attr("data-friend", obj.friend);
                        chatbox.find("a.sendchat").attr("data-id", obj.id);
                        chatbox.find("div.chatboxtext").attr("id", "cbtext" + obj.id);

                        $("#chb" + user).append(chatbox);
                        $("#chb" + user + " #cb" + obj.id + " h4 > span").html('<img src="uploads/' + obj.id + '.jpg" />');
                    }
                }
            }

            hub.client.sendchat = function (userId, user, friendId, friendUsername, message) {

                var a = $("#chb" + user + " div#cb" + friendId + " .chatboxtext");
                a.append("<img src=uploads/" + userId + ".jpg /> " + message + "<br />");

                a.scrollTop(a.prop("scrollHeight"));

                if ($("#chb"+friendUsername + " div#cb"+userId).hasClass("hidden")) {
                    $('li.cf' + userId).addClass("msg");
                }

                var b = $("#chb" + friendUsername + " div#cb" + userId + " .chatboxtext");
                b.append("<img src=uploads/" + userId + ".jpg /> " + message + "<br />");

                b.scrollTop(b.prop("scrollHeight"));
            }

            // Connect to the hub
            $.connection.hub
                        .start()
                        .done(function () {

                            /*
                            / Display unread messages
                            */

                            $("body").on("click", "a.sendchat", function (e) {
                                e.preventDefault();

                                var $this = $(this);

                                var friendId = $this.data("id");
                                var friendUsername = $this.data("friend");
                                var message = $this.parent().find("textarea").val();

                                $this.parent().find("textarea").val("");

                                hub.server.sendChat(friendId, friendUsername, message);
                            });

                            $("body").on("keypress", ".chatbox textarea", function (e) {
                                if (e.which == 13) {
                                    $(this).parent().find("a.sendchat").click();
                                    setTimeout(function () {
                                        $(this).parent().find("textarea").focus();
                                    }, 0);
                                }
                            });
                        });

            /*
            / Open chat box
            */

            $("body").on("click", ".chat ul li", function () { 

                var $this = $(this);

                if ($this.hasClass("msg")) $this.removeClass("msg");
                
                var friend = $this.text().trim();

                var chatboxNumber = $(".chatboxholder .chatbox:not(.hidden)").length;

                var id = $this.data("id");

                var right = 320;

                var cb = $(".chatboxholder #cb" + id);

                if (!cb.length) {
                    cb.css("right", right * chatboxNumber);
                } else if (cb.hasClass("hidden")) {
                    cb.removeClass("hidden");
                    cb.css("right", right * chatboxNumber);
                } else {
                    cb.addClass("hidden");
                    cb.css("right", right * chatboxNumber);
                }
            });

        }); // End ready
    </script>

}

Layout.cshtml

    <div class="chatboxholder" id="chb@(User.Identity.Name)"></div>

    <div class="chatbox">
        <h4><span></span></h4>
        <div class="chatboxtext"></div>
        <textarea class="chattextarea"></textarea>
        <br />
        <a href="#" class="sendchat">send</a>
    </div>