Skip to content

GitHub's Permission System is Flawed #113

@zenorocha

Description

@zenorocha

This is an open letter to @github on behalf of third-party app developers.

For a very long time, permission scopes has been a common issue for both users and app developers.
These scopes are extremely permissive and far too broad, preventing users from using third-party applications.

We need a more granular permission system and we hope you listen to this.

Below you can find some examples that describes exactly what we mean by how flawed the system is and some suggestions to improve it.


gist scope

Grants write access to gists.

Let's say you want to build an app like GistBox to organize gists. In order to read read private gists you would need to request the gist scope.

Here's what users would see:

gist

Even if you don't want to create any gists, you still need to request write access. Some users may find that ok, but other users can be afraid of having someone creating or editing their precious code snippets.

Solution: what if we had read_public:gist, read_private:gist, write_public:gist, and write_private:gist instead?


public_repo scope

Grants read/write access to code, commit statuses, collaborators, and deployment statuses for public repositories and organizations. Also required for starring public repositories.

Another example: let's say you want to create an app like Waffle, HuBoard, or ZenHub to manage your issues. In order to have a basic functionality like creating issues on public repositories, you would need to request the public_repo scope.

Here's what users would see:

public repo

Note how broad this permission is. These apps have no interest on wikis, deploy keys, webhooks, or anything like that. But still, that's the only way to go.

Solution: what if we had read_public:repo_code, read_public:repo_issues, and write_public:repo_stars instead?


repo scope

Grants read/write access to code, commit statuses, collaborators, and deployment statuses for public and private repositories and organizations.

Finally, the issue I'm personally facing right now. Let's say you want to build an app like DevSpace to read public and private events. For this we'd have to use the repo scope.

Here's what users would see:

private repo

This is probably the most shocking permission scope. Even though we don't want to write anything we'd still need to request a permission that can change code, issues, and many other important things from private repos.

Solution: what if we had read_public:events_repo, read_private:events_repo, read_public:events_org, and read_private:events_org instead?


You see, those are just few examples, there are many other apps facing the same issue:


@syropian, @ashumz, @acroca, @drusellers, @burtonjc, @pierrebeugnot, @rauhryan, @homeyer, @sxgao3001, @marydavis, @nparsons08, @zhangchiqing, @wbeard, @jamie, @diophore, @glenngillen, @troy, @winston do you agree?


I love GitHub and I hope this discussion contributes back to their product. There's a lot of potential on this community and I believe we can make a change.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions