I have been doing C # for a month, so please forgive the “locality” of this question, but I researched for several hours and I hit a brick wall.
I saw examples on the left and right for role-based authorization for WPF applications using IIdentity and IPrincipal .
However, I can not find much information about more permissions based on permissions , in this application, imagine that there are no groups, but just a list of permissions and users, and you can assign permission to someone.
I would like to be able to:
1) To be able to manage UI / elements based on user rights with such states as: Enabled, ReadOnly, Invisible, Collapsed (as shown here https://uiauth.codeplex.com/ )
2) Be able to indicate at the class or method level which permissions are needed (similar to http://lostechies.com/derickbailey/2011/05/24/dont-do-role-based-authorization-checks-do-activity-based-checks / )
Instead:
[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
I need something like:
[PrincipalPermission(SecurityAction.Demand, Permission = "Can add users")]
Currently, the only way I can see how to do this is to use ICommand and put the authorization logic in CanExecute methods, using a lot of string comparisons to find out if the user has the right to perform the requested actions, such as:
// Employee class public bool HasRight(SecurityRight right) { return employee.Permissions.Contains(right); } // Implementation, check if employee has right to continue if (employee.HasRight(db.SecurityRights.Single(sr => sr.Description == "Can edit users"))) { // Allowed to perform action } else { // User does not have right to continue throw SecurityException; }
I was told that Enum Flags might be what I'm looking for. What does the Enum [Flags] Enum attribute in C # mean?
I think I understand enum / flag / bits, but not enough to complete the implementation ...
If I have:
EmployeeModel
EmployeeViewModel
ThingTwoModel
ThingTwoViewModel
Mainview
I'm not sure where everything is going, and how to tie it all together ... here's what I still have (I understand that this is not a working example ... here's my problem!):
[Flags] public enum Permissions { None = 0, Create = 1 << 0, Read = 1 << 1, Update = 1 << 2, Delete = 1 << 3, User = 1 << 4, Group = 1 << 5 } public static void testFlag() { Permissions p; var x = p.HasFlag(Permissions.Update) && p.HasFlag(Permissions.User); var desiredPermissions = Permissions.User | Permissions.Read | Permissions.Create; if (x & p == desiredPermissions) {
Thanks for any recommendations.