первые открытые bluestacks и переходят к настройкам>, предпочтения> проверяют Разрешать Мост отладки Android (ADB) и нажимают кнопку пути Change, затем выбирают путь adb.
(default location: %LocalAppData%\Android\sdk\platform-tools)
тогда устанавливают один apk в эмуляторе (щелчком, установленные приложения> устанавливают apk в bluestacks главном экране)
после выполнения, это работает выполненный cmd администратором и добралось до пути adb, тогда выполняет эту команду:
adb connect localhost:5555
теперь можно открыть VSCodde или AndroidStudio и выбрать эмулятор BlueStacks.
Создайте собственный AuthorizeAttribute
, который может использовать ваши перечисления, а не строки. Когда вам нужно авторизоваться, преобразуйте перечисления в строки, добавив имя типа перечисления + значение перечисления и используйте оттуда IsInRole
.
Чтобы добавить роли в авторизованного пользователя, вам необходимо присоединиться к HttpApplication
AuthenticateRequest
событие, что-то вроде первого кода в http://www.eggheadcafe.com/articles/20020906.asp (но инвертируйте массивно вложенные операторы if в защитные предложения !).
Вы можете передавать роли пользователей в формах аутентификации cookie или получать их каждый раз из базы данных.
Добавьте ваших пользователей в таблицу «пользователи в роли ». Используйте хранимую процедуру« addusertorole »(что-то вроде этого) в своем коде для добавления к различным ролям. Вы можете очень просто создавать роли в таблице« роли ».
Используемые таблицы: User, UsersInRole, Роли
Используйте встроенные хранимые процедуры для управления этими таблицами. Затем все, что вам нужно сделать, это добавить атрибут.
Например, у вас может быть атрибут «Admin» в представлении, которое выбирает пользователя и добавляет его в роль.
Кажется, я реализовал нечто подобное.
Мое решение, основанное на 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 ()
Пожалуйста, дайте мне знать, если у вас есть дополнительные вопросы.
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;
}
}
}
}
}
}