Basic Univers
; Récupérer ou modifier les droits d'accès à un fichier
; Permet de protéger un fichier en bloquant l'accès

#Access_None = "n"
#Access_Read = "r"
#Access_Write = "w"
#Access_Change = "c"
#Access_Full = "f"

#G = Chr(34)

Procedure.s ShowAccess(Fichier.s) ; Affiche les listes DACL des fichiers spécifiés.
 
  Protected Handle.l, result.s
 
  Handle = RunProgram("cacls", #G + Fichier +#G, "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Hide)
 
  If Handle
    While ProgramRunning(Handle)
      result + ReadProgramString(Handle) + #CRLF$
    Wend
    CloseProgram(Handle)
  EndIf
 
  ProcedureReturn result
 
EndProcedure

Procedure.l RevokeAccess(Fichier.s, Utilisateur.s) ; Révoque les droits d'accès de l'utilisateur spécifié.
 
  Protected Handle.l, result.l
 
  Handle = RunProgram("cacls", #G + Fichier +#G + " /e /r " + Utilisateur, "", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Write|#PB_Program_Read)
 
  If Handle
    result = WriteProgramStringN(Handle, "O") ; Répond 'Oui' à la confirmation
    CloseProgram(Handle)
  EndIf
 
  ProcedureReturn result
 
EndProcedure

Procedure.l DenyAccess(Fichier.s, Utilisateur.s) ; Refuse l'accès à l'utilisateur spécifié.
 
  Protected Handle.l, result.l
 
  Handle = RunProgram("cacls", #G + Fichier +#G + " /d " + Utilisateur, "", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Write|#PB_Program_Read)
 
  If Handle
    result = WriteProgramStringN(Handle, "O") ; Répond 'Oui' à la confirmation
    CloseProgram(Handle)
  EndIf
 
  ProcedureReturn result
 
EndProcedure

Procedure.l GrantAccess(Fichier.s, Utilisateur.s, Access.s) ; Accorde des droits d'accès à l'utilisateur spécifié.
 
  Protected Handle.l, result.l
 
  Handle = RunProgram("cacls", #G + Fichier +#G + " /g " + Utilisateur + ":" + Access, "", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Write|#PB_Program_Read)
 
  If Handle
    result = WriteProgramStringN(Handle, "O") ; Répond 'Oui' à la confirmation
    CloseProgram(Handle)
  EndIf
 
  ProcedureReturn result
 
EndProcedure

Procedure ProtegerFichier() ; Aucun accès autorisé pour le fichier
  Filtre$ = "Texte (*.log)|*.txt;*.bat|PureBasic (*.pb)|*.pb|Tous les fichiers (*.*)|*.*"
  Filtre = 2
  Fichiers$ = OpenFileRequester("Sélectionner un Fichier", FichierParDefaut$, Filtre$, Filtre)
  If Fichiers$
   
    DenyAccess(Fichiers$, "a")
    MessageRequester("DenyAccess", "Effectué" + #LF$ + ShowAccess(Fichiers$))
  Else
    MessageRequester("Locker", "Aucun fichier n'a été sélectionné !", #MB_ICONERROR | #MB_OK)
  EndIf
EndProcedure

Procedure EnleverProtectionFichier()
  Filtre$ = "Texte (*.log)|*.txt;*.bat|PureBasic (*.pb)|*.pb|Tous les fichiers (*.*)|*.*"
  Filtre = 2
  Fichiers$ = OpenFileRequester("Sélectionner un Fichier", FichierParDefaut$, Filtre$, Filtre)
  If Fichiers$
    GrantAccess(Fichiers$, "a", #Access_Full)
    MessageRequester("GrantAccess", "Effectué:" + #LF$ + ShowAccess(Fichiers$))
  Else
    MessageRequester("PC-DEV Locker", "Sélectionner un élément de la liste !", #MB_ICONERROR | #MB_OK)
  EndIf
EndProcedure
ProtegerFichier()

; EnleverProtectionFichier()