Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O PrincipalPermissionAttribute construtor é obsoleto e produz um erro em tempo de compilação. Não é possível instanciar esse atributo ou aplicá-lo a um método.
Alterar descrição
No .NET Framework e no .NET Core, você pode anotar métodos com o PrincipalPermissionAttribute atributo. Por exemplo:
[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
public void MyMethod()
{
// Code that should only run when the current user is an administrator.
}
A partir do .NET 5, você não pode aplicar o PrincipalPermissionAttribute atributo a um método. O construtor para o atributo é obsoleto e produz um erro em tempo de compilação. Ao contrário de outros avisos de obsolescência, você não pode suprimir o erro.
Motivo da mudança
O tipo PrincipalPermissionAttribute, como outros tipos que subclassificam SecurityAttribute, faz parte da infraestrutura de Segurança de Acesso a Código (CAS) .NET. No .NET Framework 2.x - 4.x, o tempo de execução impõe anotações na entrada do PrincipalPermissionAttribute método, mesmo que o aplicativo esteja sendo executado em um cenário de confiança total. O .NET Core e o .NET 5 e posterior não oferecem suporte a atributos CAS e o tempo de execução os ignora.
Essa diferença no comportamento do .NET Framework para o .NET Core e o .NET 5 pode resultar em um cenário de "falha de segurança", onde o acesso deveria ter sido bloqueado, mas em vez disso foi permitido. Para evitar o cenário de "falha na abertura", você não pode mais aplicar o atributo no código destinado ao .NET 5 ou posterior.
Versão introduzida
5.0
Ação recomendada
Se você encontrar o erro de obsolescência, você deve tomar medidas.
Se você estiver aplicando o atributo a um método de ação MVC ASP.NET:
Considere utilizar a infraestrutura de autorização integrada do ASP.NET. O código a seguir demonstra como anotar um controlador com um AuthorizeAttribute atributo. O ambiente de execução ASP.NET autorizará o utilizador antes de executar a ação.
using Microsoft.AspNetCore.Authorization; namespace MySampleApp { [Authorize(Roles = "Administrator")] public class AdministrationController : Controller { public ActionResult MyAction() { // This code won't run unless the current user // is in the 'Administrator' role. } } }Para obter mais informações, consulte Autorização baseada em função no ASP.NET Core e Introdução à autorização no ASP.NET Core.
Se você estiver aplicando o atributo ao código da biblioteca fora do contexto de um aplicativo Web:
Execute as verificações manualmente no início do seu método. Isso pode ser feito usando o IPrincipal.IsInRole(String) método.
using System.Threading; void DoSomething() { if (Thread.CurrentPrincipal == null || !Thread.CurrentPrincipal.IsInRole("Administrators")) { throw new Exception("User is anonymous or isn't an admin."); } // Code that should run only when user is an administrator. }