Skip to content

Instantly share code, notes, and snippets.

@mxrss
Created April 26, 2016 03:21
Show Gist options
  • Save mxrss/47aae856ac878bd7ce32af6d20e9f5a4 to your computer and use it in GitHub Desktop.
Save mxrss/47aae856ac878bd7ce32af6d20e9f5a4 to your computer and use it in GitHub Desktop.
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