コード例 #1
0
        public void Test_ClassSetPermissions()
        {
            SyncTestHelpers.RunRosTestAsync(async() =>
            {
                var userA = await SyncTestHelpers.GetUserAsync();
                var userB = await SyncTestHelpers.GetUserAsync();
                var userC = await SyncTestHelpers.GetUserAsync();

                var realmUri = await CreateRealm(r =>
                {
                    CreatePermissions(ClassPermission.Get <ObjectWithPermissions>(r).Permissions);

                    var reader = PermissionRole.Get(r, "reader");
                    reader.Users.Add(userA);
                    reader.Users.Add(userB);
                    reader.Users.Add(userC);

                    var writer = PermissionRole.Get(r, "writer");
                    writer.Users.Add(userA);
                    writer.Users.Add(userB);

                    var admin = PermissionRole.Get(r, "admin");
                    admin.Users.Add(userA);
                });

                using (var realm = GetRealm(userB, realmUri))
                {
                    var subscription = await SubscribeToObjectsAsync(realm);

                    // B is 'writer' - shouldn't be able to update the role access level
                    realm.Write(() =>
                    {
                        var readerPermission       = Permission.Get <ObjectWithPermissions>("reader", realm);
                        readerPermission.CanUpdate = true;
                        readerPermission.CanCreate = true;
                    });

                    await SyncTestHelpers.WaitForSyncAsync(realm);
                }

                using (var realm = GetRealm(userC, realmUri))
                {
                    // C shouldn't be able to create objects
                    var subscription = await SubscribeToObjectsAsync(realm);
                    AssertRealmPrivileges(realm, RealmPrivileges.Read | RealmPrivileges.Update | RealmPrivileges.ModifySchema | RealmPrivileges.SetPermissions);
                    AssertClassPrivileges(realm, ClassPrivileges.Read | ClassPrivileges.Subscribe);
                    AssertObjectPrivileges(realm, ObjectPrivileges.Read);

                    Assert.That(subscription.Results.Count(), Is.EqualTo(3));

                    AddObjectsToRealm(realm, new[] { 4, 5, 6 });

                    Assert.That(subscription.Results.Count(), Is.EqualTo(6));
                    await SyncTestHelpers.WaitForSyncAsync(realm);
                    Assert.That(subscription.Results.Count(), Is.EqualTo(3));
                }

                using (var realm = GetRealm(userA, realmUri))
                {
                    var subscription = await SubscribeToObjectsAsync(realm);

                    // A should be able to update role access level
                    realm.Write(() =>
                    {
                        var readerPermission       = Permission.Get <ObjectWithPermissions>("reader", realm);
                        readerPermission.CanUpdate = true;
                        readerPermission.CanCreate = true;
                    });

                    await SyncTestHelpers.WaitForSyncAsync(realm);
                }

                using (var realm = GetRealm(userC, realmUri))
                {
                    // C should now be able to create objects
                    // Why does my subscription timeout?
                    // var subscription = await SubscribeToObjectsAsync(realm);

                    await SyncTestHelpers.WaitForSyncAsync(realm);
                    AssertRealmPrivileges(realm, RealmPrivileges.Read | RealmPrivileges.Update | RealmPrivileges.ModifySchema | RealmPrivileges.SetPermissions);
                    AssertClassPrivileges(realm, ClassPrivileges.Read | ClassPrivileges.Subscribe | ClassPrivileges.Update | ClassPrivileges.Create);
                    AssertObjectPrivileges(realm, ObjectPrivileges.Read | ObjectPrivileges.Update | ObjectPrivileges.Delete | ObjectPrivileges.SetPermissions);

                    var objects = realm.All <ObjectWithPermissions>();
                    Assert.That(objects.Count(), Is.EqualTo(3));

                    AddObjectsToRealm(realm, new[] { 4, 5, 6 });

                    Assert.That(objects.Count(), Is.EqualTo(6));
                    await SyncTestHelpers.WaitForSyncAsync(realm);
                    Assert.That(objects.Count(), Is.EqualTo(6));
                }
            });
        }
        private void ButtonLogging_Click(object sender, RoutedEventArgs e)
        {
            //Getting data from the form
            string login    = TextBoxLogin.Text;
            string password = PasswordBoxPassword.Password;
            bool   correctData;

            try
            {
                correctData = ClassSQLConnection.CheckLoginDetails(login, password);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\nTry again later", "Error");
                return;
            }

            //Invalid data
            if (!correctData)
            {
                failedAttempts++;
                string message = "Incorrect password or login";
                if (failedAttempts == 2)
                {
                    message += "\nNext unsuccessful attempt will block the login for five minutes";
                }
                MessageBox.Show(message, "Incorrect data");
                if (failedAttempts < 3)
                {
                    return;
                }
                //Block app
                ButtonLogging.IsEnabled       = false;
                TextBlockNextTry.Visibility   = Visibility.Visible;
                TextBoxLogin.IsEnabled        = false;
                PasswordBoxPassword.IsEnabled = false;
                TextBoxLogin.Text             = "";
                PasswordBoxPassword.Password  = "";
                //Time counting
                ClassTimer ct = new ClassTimer(5, 0, this);
                ct.StartTimer();
                return;
            }
            try
            {
                ClassPermission permission = ClassSQLConnections.GetUserType(login, password);
                if (permission.Permission == "Administrator")
                {
                    //Opening MainWindow
                    Main.OpenAdministratorWindow();
                    return;
                }
                if (permission.Permission == "Doctor")
                {
                    ClassLoggedDoctor.Doctor_Id = ClassSQLConnections.GetLoggedDoctorId(login, password);
                    Main.OpenDoctorWindow();
                    return;
                }
                Main.OpenMainWindow();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }