-
Notifications
You must be signed in to change notification settings - Fork 5
/
PermissionsHelper.cs
107 lines (92 loc) · 4.66 KB
/
PermissionsHelper.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
using IdentityCustomized.Models;
using Microsoft.AspNet.Identity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace IdentityCustomized
{
public class PermissionsHelper
{
public static List<PermissionListItem> GetUserPermissions()
{
ApplicationDbContext db = new ApplicationDbContext();
string userID = HttpContext.Current.User.Identity.GetUserId();
var Session = HttpContext.Current.Session;
var Application = HttpContext.Current.Application;
IdentityManager manager = new IdentityManager();
List<PermissionListItem> userPermissionItems = new List<PermissionListItem>();
List<string> AffectedUsers = new List<string>();
if (Application["AffectedUsers"] != null)
{
AffectedUsers = Application["AffectedUsers"] as List<string>;
}
if (Session["Permissions"] == null || (AffectedUsers.Any() && AffectedUsers.Contains(userID)))
{
// Get All User Role's
var roles = manager.GetUserRoles(userID);
// Get RoleID's of User Roles
var roleIDs = db.Roles.Where(r => roles.Contains(r.Name)).Select(r => r.Id).ToList();
// Get PermissionID's of those roles
var permissionIDs =
db.RolePermissions.Where(rp => roleIDs.Contains(rp.RoleID))
.Select(rp => rp.PermissionID)
.Distinct()
.ToList();
// Create A list of PermissionItems based of PermissionIDs
userPermissionItems =
db.Permissions.Include("PermissionGroup").Where(pr => permissionIDs.Contains(pr.PermissionID))
.Select(pr => new PermissionListItem()
{
PersmissionName = pr.PermissionTitle,
PermissiongRequiresAuthorization = pr.RequiresAuthorization,
PermissiongGroupName = pr.PermissionGroup.PermissionGroupTitle,
PermissiongGroupNamespace = pr.PermissionGroup.PermissionGroupNamespace,
PermissiongGroupRequiresAuthorization = pr.PermissionGroup.RequiresAuthorization,
PermissionAllowAnonymous = pr.AllowAnonymous,
ActionFullName = pr.PermissionGroup.PermissionGroupTitle + pr.PermissionTitle
}).ToList();
// Put PermissionItems Into Session
Session["Permissions"] = userPermissionItems;
// Remove UserID from AffectedUsers since user's permissions is reloaded
if ((AffectedUsers.Any() && AffectedUsers.Contains(userID)))
{
AffectedUsers.Remove(userID);
Application["AffectedUsers"] = AffectedUsers;
}
}
else
{
// Extract PermissionItems From Session
userPermissionItems = Session["Permissions"] as List<PermissionListItem>;
}
return userPermissionItems;
}
public static List<PermissionListItem> GetAllPermissions()
{
ApplicationDbContext db = new ApplicationDbContext();
var Application = HttpContext.Current.Application;
if (Application["AllPermissions"] == null)
{
List<PermissionListItem> allPermissions = db.Permissions.Include("PermissionGroup")
.Select(pr => new PermissionListItem()
{
PersmissionName = pr.PermissionTitle,
PermissiongRequiresAuthorization = pr.RequiresAuthorization,
PermissiongGroupName = pr.PermissionGroup.PermissionGroupTitle,
PermissiongGroupNamespace = pr.PermissionGroup.PermissionGroupNamespace,
PermissiongGroupRequiresAuthorization = pr.PermissionGroup.RequiresAuthorization,
PermissionAllowAnonymous = pr.AllowAnonymous,
ActionFullName = pr.PermissionGroup.PermissionGroupTitle + pr.PermissionTitle
}).ToList();
Application["AllPermissions"] = allPermissions;
return allPermissions;
}
else
{
List<PermissionListItem> allPermissions = Application["AllPermissions"] as List<PermissionListItem>;
return allPermissions;
}
}
}
}