protected override void SetValue(ModelRole role, MetadataPermission permission) { var tp = role.TablePermissions.FindByName(Column.Table.Name); var cp = tp != null?tp.MetadataObject.ColumnPermissions.Find(Column.Name) : null; // Permission removed: if (permission == MetadataPermission.Default) { // Do nothing if same value or no CP defined if (cp == null) { return; } // Otherwise, remove CP: Column.Handler.UndoManager.Add(new UndoPropertyChangedAction(Column, "ObjectLevelSecurity", cp.MetadataPermission, permission, role.Name)); tp.MetadataObject.ColumnPermissions.Remove(cp); } else // Non-default permission assigned: { Handler.BeginUpdate("object level security"); // Create TP if not exists: if (tp == null) { tp = TablePermission.CreateFromMetadata(role, new TOM.TablePermission { Table = Column.Table.MetadataObject }); } // Create CP if not exists: if (cp == null) { cp = new TOM.ColumnPermission { Column = Column.MetadataObject }; tp.MetadataObject.ColumnPermissions.Add(cp); } // Do nothing if same value if ((MetadataPermission)cp.MetadataPermission == permission) { return; } // Otherwise, assign the new permission to CP: Column.Handler.UndoManager.Add(new UndoPropertyChangedAction(Column, "ObjectLevelSecurity", cp.MetadataPermission, permission, role.Name)); cp.MetadataPermission = (TOM.MetadataPermission)permission; Handler.EndUpdate(); } }
protected override void SetValue(ModelRole role, TOM.MetadataPermission permission) { var tps = role.MetadataObject.TablePermissions; var tp = tps.Find(Column.Table.Name); var cp = tp?.ColumnPermissions?.Find(Column.Name); // Permission removed: if (permission == TOM.MetadataPermission.Default) { // Do nothing if same value or no CP defined if (cp == null || cp.MetadataPermission == permission) { return; } // Otherwise, remove CP: Column.Handler.UndoManager.Add(new UndoPropertyChangedAction(Column, "ObjectLevelSecurity", cp.MetadataPermission, permission, role.Name)); tp.ColumnPermissions.Remove(cp); } else // Non-default permission assigned: { // Create TP if not exists: if (tp == null) { tp = new TOM.TablePermission { Table = Column.Table.MetadataObject }; tps.Add(tp); } // Create CP if not exists: if (cp == null) { cp = new TOM.ColumnPermission { Column = Column.MetadataObject }; tp.ColumnPermissions.Add(cp); } // Do nothing if same value if (cp.MetadataPermission == permission) { return; } // Otherwise, assign the new permission to CP: Column.Handler.UndoManager.Add(new UndoPropertyChangedAction(Column, "ObjectLevelSecurity", cp.MetadataPermission, permission, role.Name)); cp.MetadataPermission = permission; } }