Как создать пользовательскую авторизацию для ASP.NET MVC5 Web Api с ролями и разрешениями для них? - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь реализовать авторизацию базовой роли в моих веб-API, но в последнее время я понимаю, что не могу использовать это, потому что у меня есть база данных, где роли связаны с пользователями (многие-многие), а роли связаны с разрешениями (многие ко многим), например, «Создать», «Обновить» и т. д., поэтому я пытаюсь найти лучшее решение для пользовательских разрешений и ролей для авторизации доступа к действиям в моих API. Кроме того, я не знаю, лучше ли подходить к этому, делая авторизацию только в контроллерах для Front-end части и просто генерируя ключ API для предотвращения доступа сторонних программ к моим веб-API.

1 Ответ

0 голосов
/ 21 января 2019

Если вы поддерживаете свои собственные роли, привилегии и сопоставление пользователей внутри своего приложения, в этом случае вы не можете использовать поставщиков ролей по умолчанию.Для этого типа сценариев вам необходимо создать свой собственный поставщик ролей, расширив System.Web.Security.RoleProvider, как показано ниже.

 public class CustomRoleProvider : System.Web.Security.RoleProvider
    {
        List<string> userRoles;

        public CustomRoleProvider()
        {
            //Populate the roles union privilege of logged in user inside userRoles
        }


        public override bool IsUserInRole(string username, string roleName)
        {
            //Mandatory to implement
        }


        public override string[] GetRolesForUser(string username)
        {
            //Mandatory to implement
        }

        public override void AddUsersToRoles(string[] usernames, string[] roleNames)
        {
            throw new NotImplementedException();
        }


        public override string ApplicationName
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public override void CreateRole(string roleName)
        {

        }

        public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
        {

            return true;
        }

        public override string[] FindUsersInRole(string roleName, string usernameToMatch)
        {
            throw new NotImplementedException();
        }

        public override string[] GetAllRoles()
        {
            throw new NotImplementedException();
        }

        public override string[] GetUsersInRole(string roleName)
        {
            throw new NotImplementedException();
        }

        public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames)
        {
            throw new NotImplementedException();
        }

        public override bool RoleExists(string roleName)
        {
            throw new NotImplementedException();
        }
    }

После того, как вы это реализовали, вам нужно зарегистрировать свой RoleProvider в файле конфигурации, как показано ниже.

<roleManager cacheRolesInCookie="false" defaultProvider="CustomRoleProvider" enabled="true">
      <providers>
        <clear/>
        <add name="MyCustomRoleProvier" type="YourLibrary.CustomRoleProvider, YourLibraryName"/>
      </providers>
    </roleManager>
  </system.web>

Теперь вы можете напрямую использовать атрибут фильтра авторизации в своем API или Действие, например

 [Authorize(Roles = "Admin")]
 public string GetData()
 {
 }

. Вы также можете проверить этот ответ и для получения дополнительной информации. Поставщик пользовательских ролей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...