Skip to content

Commit 49367d4

Browse files
committed
feat: authorization
1 parent 35b44e9 commit 49367d4

File tree

14 files changed

+78
-13
lines changed

14 files changed

+78
-13
lines changed
Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
1-
1+
@using GradeManagement.Client.Policies
22
<MudNavMenu>
33
<MudNavLink Href="/" Match="NavLinkMatch.All">Dashboard</MudNavLink>
4-
<MudNavGroup Title="Data" Expanded="true">
5-
<MudNavLink Href="/courses" Match="NavLinkMatch.Prefix">Courses</MudNavLink>
6-
<MudNavLink Href="/semesters" Match="NavLinkMatch.Prefix">Semesters</MudNavLink>
7-
<MudNavLink Href="/languages" Match="NavLinkMatch.Prefix">Languages</MudNavLink>
8-
<MudNavLink Href="/teachers" Match="NavLinkMatch.Prefix">Teachers</MudNavLink>
9-
</MudNavGroup>
10-
<MudNavGroup Title="Admin" Expanded="false">
11-
<MudNavLink Href="/subjects" Match="NavLinkMatch.Prefix">Subjects</MudNavLink>
12-
<MudNavLink Href="/students" Match="NavLinkMatch.Prefix">Students</MudNavLink>
13-
</MudNavGroup>
4+
<AuthorizeView Policy="@Policy.RequireTeacher">
5+
<MudNavGroup Title="Data" Expanded="true">
6+
<MudNavLink Href="/courses" Match="NavLinkMatch.Prefix">Courses</MudNavLink>
7+
<MudNavLink Href="/semesters" Match="NavLinkMatch.Prefix">Semesters</MudNavLink>
8+
<MudNavLink Href="/languages" Match="NavLinkMatch.Prefix">Languages</MudNavLink>
9+
<MudNavLink Href="/teachers" Match="NavLinkMatch.Prefix">Teachers</MudNavLink>
10+
</MudNavGroup>
11+
</AuthorizeView>
12+
<AuthorizeView Policy="@Policy.RequireAdmin">
13+
<MudNavGroup Title="Admin" Expanded="false">
14+
<MudNavLink Href="/subjects" Match="NavLinkMatch.Prefix">Subjects</MudNavLink>
15+
<MudNavLink Href="/students" Match="NavLinkMatch.Prefix">Students</MudNavLink>
16+
</MudNavGroup>
17+
</AuthorizeView>
1418
</MudNavMenu>

grade-management-new/GradeManagement.Client/Pages/Courses.razor

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
@inject SubjectClient SubjectClient
1111
@inject NavigationManager NavigationManager
1212

13+
@attribute [Authorize(Policy = Policy.RequireAdmin)]
14+
1315

1416
<style>
1517
.clickable-rows .mud-table-body .mud-table-row {

grade-management-new/GradeManagement.Client/Pages/CreationWizard.razor

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
@inject SemesterClient SemesterClient
99
@inject CourseClient CourseClient
1010
@inject NavigationManager NavigationManager
11+
@attribute [Authorize(Policy = Policy.RequireTeacher)]
1112

1213
@using GradeManagement.Client.Components.NewDialogs
1314
@using MudExtensions

grade-management-new/GradeManagement.Client/Pages/Languages.razor

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
@inject IDialogService DialogService
66
@inject CrudSnackbarService SnackbarService
77
@inject LanguageClient LanguageClient
8+
@attribute [Authorize(Policy = Policy.RequireTeacher)]
89

910
<PageTitle>Languages</PageTitle>
1011

grade-management-new/GradeManagement.Client/Pages/Semesters.razor

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
@inject IDialogService DialogService
66
@inject CrudSnackbarService SnackbarService
77
@inject SemesterClient SemesterClient
8+
@attribute [Authorize(Policy = Policy.RequireTeacher)]
89

910
<PageTitle>Semesters</PageTitle>
1011

grade-management-new/GradeManagement.Client/Pages/SingleCourse.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
@page "/courses/{Id:int}"
2-
@using System.Net
32
@using GradeManagement.Client.Components.NewDialogs
43
@layout AuthenticatedLayout
54

@@ -8,6 +7,7 @@
87
@inject CourseClient CourseClient
98
@inject ExerciseClient ExerciseClient
109
@inject GroupClient GroupClient
10+
@attribute [Authorize(Policy = Policy.RequireTeacher)]
1111

1212
<LoadingComponent LongTask="@_loading" @ref="loadingRef">
1313
<PageTitle>Course @_course.Name</PageTitle>

grade-management-new/GradeManagement.Client/Pages/Students.razor

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
@inject CrudSnackbarService SnackbarService
88
@inject SubjectService SubjectService
99
@inject StudentClient StudentClient
10+
@attribute [Authorize(Policy = Policy.RequireTeacher)]
1011

1112
<PageTitle>Students</PageTitle>
1213

grade-management-new/GradeManagement.Client/Pages/Subjects.razor

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
@inject SubjectService SubjectService
77
@inject SubjectClient SubjectClient
88

9+
@attribute [Authorize(Policy = Policy.RequireTeacher)]
10+
911
<PageTitle>Subjects</PageTitle>
1012

1113
<MudText Typo="Typo.h4" Class="mt-4">Subjects</MudText>

grade-management-new/GradeManagement.Client/Pages/Teachers.razor

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
@inject SubjectService SubjectService
99
@inject SubjectClient SubjectClient
1010
@inject UserClient UserClient
11+
@attribute [Authorize(Policy = Policy.RequireTeacher)]
1112

1213
<PageTitle>Teachers</PageTitle>
1314

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using GradeManagement.Client.Network;
2+
3+
using Microsoft.AspNetCore.Authorization;
4+
5+
namespace GradeManagement.Client.Policies;
6+
7+
public class UserTypeAuthorizationHandler(UserClient userClient) : AuthorizationHandler<UserTypeRequirement>
8+
{
9+
protected override async Task HandleRequirementAsync(
10+
AuthorizationHandlerContext context,
11+
UserTypeRequirement requirement)
12+
{
13+
var user = await userClient.GetCurrentUserAsync();
14+
15+
if (requirement.Type.Contains(user.Type))
16+
{
17+
context.Succeed(requirement);
18+
}
19+
}
20+
}

0 commit comments

Comments
 (0)