Created
April 26, 2016 03:21
-
-
Save mxrss/47aae856ac878bd7ce32af6d20e9f5a4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Diagnostics; | |
using System.Linq; | |
using System.Text; | |
using System.Threading.Tasks; | |
using System.Xml.Linq; | |
namespace ConsoleApplication1 | |
{ | |
struct Point | |
{ | |
public int x, y; | |
} | |
public enum FlagsTest : short | |
{ | |
None = 0, | |
CanRead = 1, | |
CanWrite = 2, | |
CanDelete = 4, | |
} | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
var mike = new User() {UserName = "MikeRoth"}; | |
var gregorio = new User() {UserName = "Gregorio"}; | |
var sabio = new User() {UserName = "Sabio"}; | |
Dictionary<User, FilePermission> administratorPermissions = new Dictionary<User, FilePermission>() | |
{ | |
{mike, FilePermission.Read}, | |
{gregorio, FilePermission.Read }, | |
{sabio, FilePermission.Write | FilePermission.Read | FilePermission.Delete} | |
}; | |
Dictionary<User, FilePermission> regularUserPermissions = new Dictionary<User, FilePermission>() | |
{ | |
{mike, FilePermission.Delete | FilePermission.Read | FilePermission.Write}, | |
{gregorio, FilePermission.Delete | FilePermission.Read | FilePermission.Write} | |
}; | |
Dictionary<User, FilePermission> privateUserPermissions = new Dictionary<User, FilePermission>() | |
{ | |
{mike, FilePermission.Delete | FilePermission.Read | FilePermission.Write} | |
}; | |
var permsToFile = new Dictionary<string, Dictionary<User, FilePermission>>() | |
{ | |
{"exec.bat", administratorPermissions }, | |
{"dos.sys", new Dictionary<User,FilePermission>()}, | |
{"myfile.doc", regularUserPermissions}, | |
{"WorldDomination.docx", privateUserPermissions} | |
}; | |
var checker = new AccessChecker(permsToFile); | |
AssertCondition(checker.HasAccess(FilePermission.Delete, "WorldDomination.docx", mike), true, "Mike Can access WorldDomination document"); | |
AssertCondition(checker.HasAccess(FilePermission.Write, "exec.bat", gregorio), false, "Gregorio can't write to exec.bat"); | |
AssertCondition(checker.HasAccess(FilePermission.Read, "dos.sys", sabio), false, "No one can access dos.sys"); | |
AssertCondition(checker.HasAccess(FilePermission.Delete | FilePermission.Read | FilePermission.Write, "exec.bat", sabio), true, "Sabio has full permissions to exec.bat"); | |
AssertCondition(checker.HasAccess(FilePermission.Delete, "WorldDomination.docx", sabio), false, "Sabio does not have the ability to delete Mikes document"); | |
AssertCondition(checker.HasAccess(FilePermission.Read, "WorldDomination.docx", sabio), false, "Gregorio does not have the ability to read mikes plan"); | |
Console.Read(); | |
} | |
public static void AssertCondition(bool actual, bool expected, string test) | |
{ | |
if (actual == expected) | |
{ | |
Console.ForegroundColor = ConsoleColor.Green; | |
Console.WriteLine(string.Format("* {0}", test)); | |
} | |
else | |
{ | |
Console.ForegroundColor = ConsoleColor.Red; | |
Console.WriteLine("- {0}", test); | |
} | |
} | |
} | |
public enum FilePermission | |
{ | |
None = 0, | |
Read = 1, | |
Write = 2, | |
Delete = 4, | |
} | |
public class User | |
{ | |
public string UserName { get; set; } | |
} | |
public class AccessChecker | |
{ | |
private Dictionary<string, Dictionary<User, FilePermission>> _fileToPermissionsDirectory = new Dictionary<string, Dictionary<User, FilePermission>>(); | |
public AccessChecker(Dictionary<string, Dictionary<User, FilePermission>> fileToPermissions ) | |
{ | |
_fileToPermissionsDirectory = fileToPermissions; | |
} | |
public bool HasAccess(FilePermission requested, string file, User user) | |
{ | |
throw new NotImplementedException(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment