/// <summary>
        /// Can do Permission to Document
        /// </summary>
        /// <param name="permission">The Permission.</param>
        /// <param name="document">The Document.</param>
        /// <returns>True if can.</returns>
        protected bool CanAsync(Permission permission, ILocationPath document)
        {
            var authorizationResult = AuthorizationService
                                      .AuthorizeAsync(User, document, new PermissionRequirement(permission)).Result;

            return(authorizationResult.Succeeded);
        }
Exemplo n.º 2
0
 /// <summary>
 /// Location Ids.
 /// </summary>
 /// <remarks>Returns a flat array of the 4 locations as a single array.</remarks>
 /// <param name="locationPath">Document.</param>
 /// <returns>List of Locations.</returns>
 public static IEnumerable <string> LocationIds(this ILocationPath locationPath)
 {
     return(new[]
     {
         locationPath.NationalLocationId,
         locationPath.RegionLocationId,
         locationPath.TrustLocationId,
         locationPath.SiteLocationId,
     });
 }
Exemplo n.º 3
0
        /// <inheritdoc/>
        public async Task <bool> HasPermission(string emailAddress, ILocationPath document, Permission permission)
        {
            if (_authorizationSettings.Value.Disable)
            {
                return(true);
            }

            var meUser = await _userRetrievalService.Handle(new UserRetrievalByOktaIdQuery(emailAddress));

            if (meUser.Permissions != null)
            {
                var hasPermission = meUser.Permissions.Any(
                    p => _rolePermissions.Can((UserRoles)p.UserRole, permission) &&
                    document.LocationIds().Any(l => l == p.LocationId));

                if (hasPermission)
                {
                    return(true);
                }
            }

            return(false);
        }
        /// <summary>
        /// Update Location Path from a list of Locations.
        /// </summary>
        /// <param name="locationPath">The Location Path.</param>
        /// <param name="locations">Locations.</param>
        public static void UpdateLocationPath(this ILocationPath locationPath, IEnumerable <Location> locations)
        {
            foreach (var location in locations)
            {
                switch (location.Type)
                {
                case LocationType.National:
                    locationPath.NationalLocationId = location.LocationId;
                    break;

                case LocationType.Region:
                    locationPath.RegionLocationId = location.LocationId;
                    break;

                case LocationType.Trust:
                    locationPath.TrustLocationId = location.LocationId;
                    break;

                case LocationType.Site:
                    locationPath.SiteLocationId = location.LocationId;
                    break;
                }
            }
        }