ASP.NET MVC формирует аутентификацию +, авторизовывает атрибут + простые роли

первые открытые bluestacks и переходят к настройкам>, предпочтения> проверяют Разрешать Мост отладки Android (ADB) и нажимают кнопку пути Change, затем выбирают путь adb. (default location: %LocalAppData%\Android\sdk\platform-tools)

тогда устанавливают один apk в эмуляторе (щелчком, установленные приложения> устанавливают apk в bluestacks главном экране)

после выполнения, это работает выполненный cmd администратором и добралось до пути adb, тогда выполняет эту команду:

adb connect localhost:5555

теперь можно открыть VSCodde или AndroidStudio и выбрать эмулятор BlueStacks.

54
задан Kevin 5 September 2009 в 19:43
поделиться

4 ответа

Создайте собственный AuthorizeAttribute , который может использовать ваши перечисления, а не строки. Когда вам нужно авторизоваться, преобразуйте перечисления в строки, добавив имя типа перечисления + значение перечисления и используйте оттуда IsInRole .

Чтобы добавить роли в авторизованного пользователя, вам необходимо присоединиться к HttpApplication AuthenticateRequest событие, что-то вроде первого кода в http://www.eggheadcafe.com/articles/20020906.asp (но инвертируйте массивно вложенные операторы if в защитные предложения !).

Вы можете передавать роли пользователей в формах аутентификации cookie или получать их каждый раз из базы данных.

8
ответ дан 7 November 2019 в 07:51
поделиться

Добавьте ваших пользователей в таблицу «пользователи в роли ». Используйте хранимую процедуру« addusertorole »(что-то вроде этого) в своем коде для добавления к различным ролям. Вы можете очень просто создавать роли в таблице« роли ».

Используемые таблицы: User, UsersInRole, Роли

Используйте встроенные хранимые процедуры для управления этими таблицами. Затем все, что вам нужно сделать, это добавить атрибут.

Например, у вас может быть атрибут «Admin» в представлении, которое выбирает пользователя и добавляет его в роль.

0
ответ дан 7 November 2019 в 07:51
поделиться

Кажется, я реализовал нечто подобное.
Мое решение, основанное на NerdDinner tutorial, следующее.

Когда вы регистрируете пользователя, добавьте код, подобный этому:

var authTicket = new FormsAuthenticationTicket(
    1,                             // version
    userName,                      // user name
    DateTime.Now,                  // created
    DateTime.Now.AddMinutes(20),   // expires
    rememberMe,                    // persistent?
    "Moderator;Admin"                        // can be used to store roles
    );

string encryptedTicket = FormsAuthentication.Encrypt(authTicket);

var authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
System.Web.HttpContext.Current.Response.Cookies.Add(authCookie);

Добавьте следующий код в Global.asax.cs:

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
    HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
    if (authCookie == null || authCookie.Value == "")
        return;

    FormsAuthenticationTicket authTicket;
    try
    {
        authTicket = FormsAuthentication.Decrypt(authCookie.Value);
    }
    catch
    {
        return;
    }

    // retrieve roles from UserData
    string[] roles = authTicket.UserData.Split(';');

    if (Context.User != null)
        Context.User = new GenericPrincipal(Context.User.Identity, roles);
}

После того, как вы это сделаете, вы можете использовать [Authorize] атрибут в коде действия вашего контроллера:

[Authorize(Roles="Admin")]
public ActionResult AdminIndex ()

Пожалуйста, дайте мне знать, если у вас есть дополнительные вопросы.

119
ответ дан 7 November 2019 в 07:51
поделиться
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using SISWEBBSI.Models.Model;
using SISWEBBSI.Models.Model.Entities;
using SISWEBBSI.Models.ViewModel;

namespace SISWEBBSI.Controllers.ActionFilter
{
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
    public sealed class RequerAutorizacao : ActionFilterAttribute
    {
        public Grupo.Papeis[] Papeis = {} ;
        public string ViewName { get; set; }
        public ViewDataDictionary ViewDataDictionary { get; set; }
        public AcessoNegadoViewModel AcessoNegadoViewModel { get; set; }

        public override void OnActionExecuting(ActionExecutingContext FilterContext)
        {
            if (!FilterContext.HttpContext.User.Identity.IsAuthenticated)
            {
                string UrlSucesso = FilterContext.HttpContext.Request.Url.AbsolutePath;
                string UrlRedirecionar = string.Format("?ReturnUrl={0}", UrlSucesso);
                string UrlLogin = FormsAuthentication.LoginUrl + UrlRedirecionar;
                FilterContext.HttpContext.Response.Redirect(UrlLogin, true);
            }
            else
            {
                if (Papeis.Length > 0)
                {
                    //Papel ADMINISTRADOR sempre terá acesso quando alguma restrição de papeis for colocada.
                    int NovoTamanho = Papeis.Count() + 1;
                    Array.Resize(ref Papeis, NovoTamanho);
                    Papeis[NovoTamanho - 1] = Grupo.Papeis.ADMINISTRADOR;
                    UsuarioModel Model = new UsuarioModel();
                    if (!Model.UsuarioExecutaPapel(FilterContext.HttpContext.User.Identity.Name, Papeis))
                    {
                        ViewName = "AcessoNegado";
                        String Mensagem = "Você não possui privilégios suficientes para essa operação. Você deve estar nos grupos que possuem";
                        if(Papeis.Length == 1)
                        {
                            Mensagem = Mensagem + " o papel: <BR/>";
                        }
                        else if (Papeis.Length > 1)
                        {
                            Mensagem = Mensagem + " os papéis: <BR/>";
                        }

                        foreach (var papel in Papeis)
                        {
                            Mensagem = Mensagem + papel.ToString() + "<br/>";
                        }
                        AcessoNegadoViewModel = new AcessoNegadoViewModel();
                        AcessoNegadoViewModel.Mensagem = Mensagem;
                        ViewDataDictionary = new ViewDataDictionary(AcessoNegadoViewModel);
                        FilterContext.Result = new ViewResult { ViewName = ViewName, ViewData = ViewDataDictionary };
                        return;
                    }
                }
            }
        }
    }
}
-9
ответ дан 7 November 2019 в 07:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: