add, remove role to organization unit

pull/2563/head
Mehmet Perk 6 years ago
parent 1b56ed47bb
commit c8e8232506

@ -106,7 +106,7 @@ namespace Volo.Abp.Identity
public virtual async Task AddToOrganizationUnitAsync(Guid userId, Guid ouId)
{
await AddToOrganizationUnitAsync(
await GetByIdAsync(userId),
await _identityUserRepository.GetAsync(userId, true),
await _organizationUnitRepository.GetAsync(ouId)
);
}
@ -130,7 +130,7 @@ namespace Volo.Abp.Identity
public virtual async Task RemoveFromOrganizationUnitAsync(Guid userId, Guid ouId)
{
await RemoveFromOrganizationUnitAsync(
await GetByIdAsync(userId),
await _identityUserRepository.GetAsync(userId, true),
await _organizationUnitRepository.GetAsync(ouId)
);
}
@ -145,7 +145,7 @@ namespace Volo.Abp.Identity
public virtual async Task SetOrganizationUnitsAsync(Guid userId, params Guid[] organizationUnitIds)
{
await SetOrganizationUnitsAsync(
await GetByIdAsync(userId),
await _identityUserRepository.GetAsync(userId, true),
organizationUnitIds
);
}

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using Volo.Abp.Domain.Entities.Auditing;
using Volo.Abp.MultiTenancy;
@ -37,6 +38,11 @@ namespace Volo.Abp.Identity.Organizations
/// </summary>
public virtual ICollection<OrganizationUnit> Children { get; set; }
/// <summary>
/// Roles of this OU.
/// </summary>
public virtual ICollection<OrganizationUnitRole> Roles { get; protected set; }
/// <summary>
/// Initializes a new instance of the <see cref="OrganizationUnit"/> class.
/// </summary>
@ -56,6 +62,8 @@ namespace Volo.Abp.Identity.Organizations
TenantId = tenantId;
DisplayName = displayName;
ParentId = parentId;
Roles = new Collection<OrganizationUnitRole>();
}
/// <summary>
@ -174,5 +182,36 @@ namespace Volo.Abp.Identity.Organizations
return splittedCode.Take(splittedCode.Length - 1).JoinAsString(".");
}
public virtual void AddRole(Guid roleId)
{
Check.NotNull(roleId, nameof(roleId));
if (IsInRole(roleId))
{
return;
}
Roles.Add(new OrganizationUnitRole(TenantId, roleId, Id));
}
public virtual void RemoveRole(Guid roleId)
{
Check.NotNull(roleId, nameof(roleId));
if (!IsInRole(roleId))
{
return;
}
Roles.RemoveAll(r => r.RoleId == roleId);
}
public virtual bool IsInRole(Guid roleId)
{
Check.NotNull(roleId, nameof(roleId));
return Roles.Any(r => r.RoleId == roleId);
}
}
}

@ -4,8 +4,10 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Domain.Services;
using Volo.Abp.Identity.Localization;
using Volo.Abp.Threading;
using Volo.Abp.Uow;
namespace Volo.Abp.Identity.Organizations
@ -18,13 +20,19 @@ namespace Volo.Abp.Identity.Organizations
protected IOrganizationUnitRepository _organizationUnitRepository { get; private set; }
private readonly IStringLocalizer<IdentityResource> _localizer;
private readonly IIdentityRoleRepository _identityRoleRepository;
private readonly ICancellationTokenProvider _cancellationTokenProvider;
public OrganizationUnitManager(
IOrganizationUnitRepository organizationUnitRepository,
IStringLocalizer<IdentityResource> localizer)
IStringLocalizer<IdentityResource> localizer,
IIdentityRoleRepository identityRoleRepository,
ICancellationTokenProvider cancellationTokenProvider)
{
_organizationUnitRepository = organizationUnitRepository;
_localizer = localizer;
_identityRoleRepository = identityRoleRepository;
_cancellationTokenProvider = cancellationTokenProvider;
}
[UnitOfWork]
@ -134,5 +142,45 @@ namespace Volo.Abp.Identity.Organizations
return await _organizationUnitRepository.GetAllChildrenWithParentCodeAsync(code, parentId);
}
public virtual Task<bool> IsInOrganizationUnitAsync(IdentityUser user, OrganizationUnit ou)
{
return Task.FromResult(user.IsInOrganizationUnit(ou.Id));
}
public virtual async Task AddRoleToOrganizationUnitAsync(Guid roleId, Guid ouId)
{
await AddRoleToOrganizationUnitAsync(
await _identityRoleRepository.GetAsync(roleId),
await _organizationUnitRepository.GetAsync(ouId)
);
}
public virtual Task AddRoleToOrganizationUnitAsync(IdentityRole role, OrganizationUnit ou)
{
var currentRoles = ou.Roles;
if (currentRoles.Any(r => r.Id == role.Id))
{
return Task.FromResult(0);
}
ou.AddRole(role.Id);
return Task.FromResult(0);
}
public virtual async Task RemoveRoleFromOrganizationUnitAsync(Guid roleId, Guid ouId)
{
await RemoveRoleFromOrganizationUnitAsync(
await _identityRoleRepository.GetAsync(roleId),
await _organizationUnitRepository.GetAsync(ouId, true)
);
}
public virtual async Task RemoveRoleFromOrganizationUnitAsync(IdentityRole role, OrganizationUnit organizationUnit)
{
await _organizationUnitRepository.EnsureCollectionLoadedAsync(organizationUnit, ou => ou.Roles, _cancellationTokenProvider.Token).ConfigureAwait(false);
organizationUnit.RemoveRole(role.Id);
}
}
}

@ -1,5 +1,6 @@
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Identity.Organizations;
namespace Volo.Abp.Identity.EntityFrameworkCore
{
@ -30,5 +31,16 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
return queryable
.Include(x => x.Claims);
}
public static IQueryable<OrganizationUnit> IncludeDetails(this IQueryable<OrganizationUnit> queryable, bool include = true)
{
if (!include)
{
return queryable;
}
return queryable
.Include(x => x.Roles);
}
}
}
Loading…
Cancel
Save