LDAP Changes Everything

rubyrailsbuilding-in-public

LDAP sync landed this week and it changes the nature of what Meera is.

Before LDAP, Meera was a project board that happened to run on our servers. Useful, but still a separate thing with its own user accounts and passwords. Someone new joins the team and you’d have to remember to create their Meera account manually. Someone leaves and you’d have to remember to remove it. In practice, “remember to” means “sometimes forget to,” which means stale accounts and access that should have been revoked.

Now it’s part of our infrastructure. The LDAP sync job connects to Active Directory, pulls the user list, and reconciles. New person in the directory? Account created in Meera. Person removed from the directory? Account disabled. Attributes changed: name, email, title? Updated automatically. Authentication goes through LDAP bind, so people log in with the same credentials they use for everything else.

This is the feature that made the whole Meera effort worth it. Not the boards, not the inline editing, not even the summary rows. Those are table stakes for a project board. LDAP integration is the thing that no SaaS tool does right, because SaaS tools want to own your identity. They want to be the source of truth for who has access. We already have a source of truth. We just needed a project board that respects it.

The implementation

The core is a LDAPSyncJob that runs on a schedule. It connects to the directory server with a bind DN, searches with a configurable filter, and maps LDAP attributes to Meera user fields. The configuration lives in MeeraConfig: host, port, encryption mode, bind credentials, search base, attribute mapping. Everything you’d expect if you’ve worked with LDAP before.

The tricky part was scoping board visibility to memberships. Before LDAP, everyone could see every board because everyone had been manually added. Now that users can appear automatically, boards need explicit membership. This week’s other commits handle that: scoping visible boards to user board memberships and fixing a broken migration that came along for the ride.

Seven months in

Meera is our daily driver now. Fully. The Jira Server instance is still running but nobody opens it anymore. All active work lives in Meera: product stories, infrastructure tasks, client projects. The LDAP sync means nobody thinks about account management. The board model means every team can set up their workspace the way they want without stepping on each other.

Seven months ago I was staring at a license cliff with nine days to go. Now we have a project board that fits our infrastructure better than Jira ever did. Not because Jira was bad. It served us well for years. But because something built to work with your tools, your directory, your deployment model will always fit better than something built for everyone.