É fácil dedicar algum tempo para aprender algo entre as pesadas tarefas de desenvolvimento. Descobri que existem vários exemplos de conteúdo System.Security na máquina. Nunca usei esse namespace antes, então usei-o apenas para aprender sobre ele. Por não ser um estudo sistemático, não é fácil de organizar. Depois de pensar bem, explicarei com exemplos.
1. Defina a permissão
1[FileIOPermission(SecurityAction.Demand, Write= "C:\temp.txt")]
2aplicativo de classe pública: System.Windows.Forms.Form
3{
4 // omitido
5}
FileIOPermissionAttribute é definido em System.Security.Permissions. Ele herda de SecurityAttribute Neste exemplo, é necessário ter permissões de gravação no arquivo C:temp.txt ao usar a classe App.
A documentação da estrutura .net tem a dizer sobre os requisitos de segurança: "Para garantir que apenas os chamadores que receberam permissões específicas possam chamar seu código, você pode declarar ou impor que os chamadores do seu código tenham permissões específicas. Ou conjunto de permissões. Requisitos causam o tempo de execução para executar uma verificação de segurança, aplicando assim restrições ao código de chamada. Durante a verificação de segurança, o tempo de execução percorre a pilha de chamadas, verifica as permissões de cada chamador na pilha e determina se as permissões solicitadas foram concedidas. chamador. Se for descoberto que um chamador não possui as permissões necessárias, a verificação de segurança falhará e uma SecurityException será lançada
. SecurityAction.Demand pode atuar sobre uma classe ou método, neste caso atua sobre uma classe. Write é uma das propriedades de FileIOPermission. Outras propriedades comumente usadas incluem Read, Append, All, etc.
Existem também alguns valores na enumeração SecurityAction que atuam no assembly. Por exemplo, o exemplo a seguir:
[assembly:SecurityPermission(SecurityAction.RequestMinimum,UnownedCode=true)]
SecurityAction.RequestMinimum é a permissão mínima para a execução da solicitação. Esta linha requer que o assembly permita chamadas para código não gerenciado.
Além do método declarativo, você também pode usar o método obrigatório. O seguinte código:
1FileIOPermission filePerm = new FileIOPermission(FileIOPermissionAccess.AllAccess, "C:\temp.txt");
2tentar
3{
4 arquivoPerm.Demand();
5
6 // O código para acessar o arquivo vai aqui
7}
8catch(SecurityExceptionexcep)
9{
10 MessageBox.Show (exceto.Message);
11 retorno;
12}
13
2. Gerenciamento de funções de usuários
O gerenciamento de usuários e suas funções é usado em muitos programas. Hoje em dia, o asp.net 2.0 aprimorou muito esse aspecto, e os desenvolvedores podem fazer aplicativos muito bons sem saber muito sobre tecnologia. No entanto, para aplicativos Windows Form, muitos locais ainda precisam ser definidos pelos próprios programadores.
Supondo que já conhecemos o nome do usuário e as funções às quais ele pertence, podemos definir o Principal do thread atual assim:
1GenericIdentity genIdent = new GenericIdentity(userName);
2GenericPrincipal genPrin = novo GenericPrincipal(genIdent, funções);
3Thread.CurrentPrincipal = genPrin;
4
Então temos três maneiras de verificar as funções do usuário.
O primeiro método é usar o método GenericPrincipal.IsInRole:
1GenericPrincipal currentPrin = Thread.CurrentPrincipal as GenericPrincipal;
2
3if (currentPrin != null && currentPrin.IsInRole("Gerente"))
4{
5 // omitido
6}
7
O segundo método é usar a classe PrincipalPermission, que é semelhante ao método obrigatório na configuração de permissão:
1PrincipalPermission prinPerm = new PrincipalPermission(null, "Manager");
2
3tente
4{
5 prinPerm.Demand();
6
7 //faça alguma coisa
8}
9 captura
10{
11 // tratamento de erros
12}
O terceiro método é semelhante ao método de declaração na configuração de permissão:
1private void DecPermButton_Click(object sender, System.EventArgs e)
2{
3 tentativas
4 {
5 performManagerAction();
6 //faça alguma coisa
7}
8 captura
9 {
10 // tratamento de erros
11}
12}
13
14[PrincipalPermission(SecurityAction.Demand, Role="Gerente")]
15void performManagerAction()
16{
17}
Outra coisa importante sobre segurança é a criptografia. Não tenho tempo para escrever hoje, falarei sobre isso outro dia.