예제 #1
0
        public async Task CheckPermissions_DoesntHavePermission_Fail()
        {
            // arrange
            var permission             = new PermissionDescriptor <bool>("Test");
            var participantPermissions = CreateParticipantPermissions();

            var context = CreateContext(builder =>
                                        builder.RegisterInstance(participantPermissions).AsImplementedInterfaces());

            // act
            var result = await ServiceInvokerPermissionMiddleware.CheckPermissions(context, permission);

            // assert
            Assert.False(result.Success);
            Assert.Equal(result.Error?.Code, CommonError.PermissionDenied(permission).Code);
        }
        public static async ValueTask <SuccessOrError <Unit> > CheckPermissions(ServiceInvokerContext context,
                                                                                params PermissionDescriptor <bool>[] requiredPermissions)
        {
            if (requiredPermissions.Length == 0)
            {
                return(SuccessOrError <Unit> .Succeeded(Unit.Value));
            }

            var participantPermissions = context.Context.Resolve <IParticipantPermissions>();
            var permissions            =
                await participantPermissions.FetchForParticipant(context.Participant);

            foreach (var permission in requiredPermissions)
            {
                var permissionValue = await permissions.GetPermissionValue(permission);

                if (!permissionValue)
                {
                    return(CommonError.PermissionDenied(permission));
                }
            }

            return(SuccessOrError <Unit> .Succeeded(Unit.Value));
        }