2015-01-11 17 views
5

Tôi hiện có bot tự động hóa một số thao tác GitHub, chẳng hạn như hợp nhất yêu cầu kéo, thông báo cho nhân viên về Slack khi PR được mở. ví dụ Hubot có hương vị tùy chỉnh)GitHub API Cách kiểm tra xem người dùng có quyền truy cập ghi vào kho lưu trữ

Khi nhân viên đưa cho anh ta lệnh để hợp nhất yêu cầu kéo, trước tiên anh ta kiểm tra xem liệu họ có thuộc về một nhóm có quyền truy cập ghi vào kho lưu trữ đó hay không. Nó hoạt động, nhưng mã không phải là tuyệt vời.

Đầu tiên, anh ấy nhận tất cả các nhóm trong tổ chức, lặp lại họ, nhận tất cả người dùng được chỉ định cho nhóm đó, nếu anh ấy tìm thấy người dùng phát lệnh kết hợp, anh ấy kiểm tra xem nhóm đó có quyền ghi hay không. Nếu không, xác thực là tốt.

Đây có phải là cách tốt nhất để sử dụng không? Tôi cảm thấy nó có thể đơn giản hơn nhiều.

Trả lời

4

UPDATE: bây giờ có một endpoint API GitHub cho việc này:

https://developer.github.com/v3/repos/collaborators/#review-a-users-permission-level


ĐÁP OLD: Không có một cách đơn giản hơn nhiều để làm điều này hiện (nhưng tôi đồng ý rằng nó sẽ là tuyệt vời nếu có một cách thanh lịch hơn để có được thông tin này). Bạn có thể giảm số lượng yêu cầu bằng cách tìm nạp the user's teamsthe list of teams which have access to the repository (và không phải tất cả các nhóm trong tổ chức). Giao điểm của hai danh sách này sẽ cho phép bạn trả lời câu hỏi, tôi nghĩ vậy.

(Ngoài ra, trong giải pháp của bạn, lưu ý rằng bạn không chỉ phải kiểm tra xem người dùng có phải là thành viên của nhóm truy cập push hay không - bạn cũng cần phải kiểm tra xem nhóm truy cập push này has access to the repository in question. là thành viên của nhóm truy cập không có quyền truy cập vào kho lưu trữ được đề cập và thành viên của nhóm truy cập có quyền truy cập vào kho lưu trữ được đề cập.)

+0

Tương tự như http://stackoverflow.com/a/20734751/12916. –

+0

@ lukerollins Tôi vừa cập nhật câu trả lời với liên kết đến điểm cuối mới cho phép bạn thực hiện việc này: https://developer.github.com/v3/repos/collaborators/#review-a-users-permission-level –

1

Công ty của tôi sử dụng Github enterprise .

API Docs link này giúp

GET/Repos /: chủ sở hữu /: repo/cộng tác viên /: username

Nếu người dùng có quyền truy cập bạn sẽ nhận được một phản ứng tương tự như

Trạng thái: 204 Không có nội dung

X-RateLimit-Limit: 5000

X-RateLimit-Còn lại: 4999

+0

Như lưu ý trong http://stackoverflow.com/questions/20733221/determine-a-collaborators-permissions-to-an-organization-repos-via-the-api điều này là không đủ để phân biệt các chế độ truy cập, trong trường hợp một số nhóm được cung cấp kéo truy cập và những người khác truy cập lớn hơn. Đối với một số ứng dụng, nó có thể không quan trọng. –

+0

Cách giải quyết là liệt kê tất cả '/ repos /: owner /: repo/cộng tác viên', tìm kiếm kết quả phù hợp với người dùng đã cho và sau đó kiểm tra' quyền', nhưng điều này không hiệu quả, đặc biệt khi phân trang có thể buộc bạn thực hiện nhiều yêu cầu.Tôi đã liên lạc với GitHub và một đại diện đã đồng ý rằng họ có thể xem xét một API dành riêng cho mục đích này. –

Các vấn đề liên quan