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); } }