-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathApplicationService.cs
More file actions
64 lines (55 loc) · 3 KB
/
ApplicationService.cs
File metadata and controls
64 lines (55 loc) · 3 KB
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
using ECommerceAPI.Application.Abstractions.Services.Configurations;
using ECommerceAPI.Application.CustomAttributes;
using ECommerceAPI.Application.DTOs.Configuration;
using ECommerceAPI.Application.Enums;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Routing;
using System.Reflection;
namespace ECommerceAPI.Infrastructure.Services.Configuration
{
public class ApplicationService : IApplicationService
{
public List<Menu> GetAuthorizeDefinitionEndpoints(Type type)
{
Assembly assembly = Assembly.GetAssembly(type);
var controllers = assembly.GetTypes().Where(t => t.IsAssignableTo(typeof(ControllerBase)));
List<Menu> menus = new();
if (controllers != null)
foreach (var controller in controllers)
{
var actions = controller.GetMethods().Where(m => m.IsDefined(typeof(AuthorizeDefinitionAttribute)));
if (actions != null)
foreach (var action in actions)
{
var attributes = action.GetCustomAttributes(true);
if (attributes != null)
{
Menu menu = null;
var authorizeDefinitionAttribute = attributes.FirstOrDefault(a => a.GetType() == typeof(AuthorizeDefinitionAttribute)) as AuthorizeDefinitionAttribute;
if (!menus.Any(m => m.Name == authorizeDefinitionAttribute.Menu))
{
menu = new() { Name = authorizeDefinitionAttribute.Menu };
menus.Add(menu);
}
else
menu = menus.FirstOrDefault(m => m.Name == authorizeDefinitionAttribute.Menu);
Application.DTOs.Configuration.Action _action = new()
{
ActionType = Enum.GetName(typeof(ActionType), authorizeDefinitionAttribute.ActionType),
Definition = authorizeDefinitionAttribute.Definition
};
var httpAttribute = attributes.FirstOrDefault(a => a.GetType().IsAssignableTo(typeof(HttpMethodAttribute))) as HttpMethodAttribute;
if (httpAttribute != null)
_action.HttpType = httpAttribute.HttpMethods.First();
else
_action.HttpType = HttpMethods.Get;
_action.Code = $"{_action.HttpType}.{_action.ActionType}.{_action.Definition.Replace(" ", "")}";
menu.Actions.Add(_action);
}
}
}
return menus;
}
}
}