ASP.NET Членство / Роли - как связать пользователя с несколькими приложениями / ролями? - PullRequest
3 голосов
/ 04 января 2012

Я работаю над проектом, чтобы разбить большой веб-сайт на более мелкие, более конкретные сайты.Мне нужно иметь возможность ограничить доступ к этим сайтам только пользователям, которые имеют необходимые разрешения и хотели бы использовать существующую модель данных членства / ролей, где это возможно.

Так что в идеале я хотел быназначить потенциально несколько приложений (как определено в таблице aspnet_applications) и специфичные для приложения роли (aspnet_roles) одному пользователю.Однако модель членства в aspnet, по-видимому, этого не допускает, поскольку записи aspnet_users и aspnet_membership содержат определенный applicationID.

Как можно назначить одного пользователя нескольким приложениям / ролям?

Ответы [ 3 ]

2 голосов
/ 05 января 2012

Если вы не хотите, чтобы ваши данные были связаны с одним приложением, возможно, в дополнение к стандартному поставщику SqlMembership, вы можете рассмотреть возможность использования собственного управления / роли поставщика.

Он обладает гораздо большей гибкостью в использовании источников данных, например, вы можете использовать свои собственные таблицы в базе данных для хранения информации о членах / ролях и использовать эти таблицы в нескольких приложениях и т. Д.

Вы даже можете пойти дальше, например, вы можете реализовать собственные поставщики членства и ролей и создать отдельный модуль (сборку), а затем повторно использовать этот модуль в нескольких приложениях.

2 голосов
/ 05 января 2012

Я использовал моего поставщика членства sql, и я не думаю, что он слишком отличается от поставщика sql с точки зрения дизайна.

Чтобы связать одного и того же пользователя с различными ролями, должно бытьтаблица с именем asp_net_usersinroles .В эту таблицу вы можете вставить один и тот же идентификатор пользователя с другим ролью, так что это позволит пользователям иметь несколько ролей.

Аналогичным образом вам нужно будет создать пользовательский интерфейс, чтобы позволить администраторам назначать разные роли.В моем случае я использовал ListBox для отображения существующих ролей в приложении, что позволяет множественный выбор.

Надеюсь, это поможет.

0 голосов
/ 01 июня 2012

Вы можете установить ApplicationName, с которым проверяется членство, в коде.

У меня есть приложение администратора, которое контролирует все для ряда других приложений.Я хотел, чтобы пользователи из этого приложения могли входить во все другие приложения, поэтому, если не удается выполнить вход для пользователя в приложении по умолчанию, я проверяю приложение «Администрирование».Это то, что я имею для входа в систему.Обратите внимание на строку "Membership.ApplicationName =" Administration ";"

if (Membership.ValidateUser(model.UserName, model.Password))
{
    FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
    if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
        && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
    {
        return Redirect(returnUrl);
    }
    else
    {
        return RedirectToAction("Index", "Home");
    }
}
else
{
    Membership.ApplicationName = "Administration";
    if (Membership.ValidateUser(model.UserName, model.Password))
    {
        FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
        if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && retu    rnUrl.StartsWith("/")
            && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
        {
            return Redirect(returnUrl);
        }
        else
        {
            return RedirectToAction("Index", "Home");
        }
    }
    else
    {
        ModelState.AddModelError("", "The user name or password provided is incorrect.");
    }
}
...