10/10/2018, 10:34

[Help] Gom nhiều hệ thống lại thành 1

Số là em có các ứng dụng nhỏ nhỏ viết bằng php, mysql dùng trong nội bộ công ty. Những ứng dụng này hiện tách biệt với nhau. Cơ sở dữ liệu user cũng tách biệt.

Và như vậy là phát sinh vấn đề : 1 nhân viên phải nhớ nhiều tài khoản của mình trên nhiều ứng dụng, và mỗi lần muốn đổi pass chẳng hạn thì phải đổi trên từng ứng dụng.

Nên em muốn gom lại để sử dụng chung một hệ thống user thôi. Có nghĩa là user sẽ truy cập vào trang chủ, đăng nhập, sau đó dựa vào vai trò của user mà hệ thống sẽ cho phép user tiếp tục truy xuất ứng dụng nào.

Mấy bác giúp dùm em xem cách nào gom lại thuận tiện nhất và không làm ảnh hưởng nhiều đến những ứng dụng này ?

Em cám ơn nhiều.
vzic viết 12:36 ngày 10/10/2018
Chắc chắn table account phải có cấu trúc giống nhau rồi? Nếu không trùng nhau thì phải edit code thôi. Gom các table về 1 data. Quản lý cho tiện cũng như backup.
rong_nho viết 12:42 ngày 10/10/2018
Được gửi bởi vzic
Chắc chắn table account phải có cấu trúc giống nhau rồi? Nếu không trùng nhau thì phải edit code thôi. Gom các table về 1 data. Quản lý cho tiện cũng như backup.
Chuẩn không cần chỉnh, ngày trước tôi có 2 cái app làm bằng Vb6.0. 3 Cái làm bằng php phải gom vào với nhau, hic.... Hy vọng bạn không giống tôi ngày trước.
thuyduongcd viết 12:50 ngày 10/10/2018
Tạo thêm 1 hệ thống quản lý user nữa (tạm gọi là passport system).

Mọi thao tác đăng ký, đăng nhập, đổi mật khẩu, thoát,... nói chung là liên quan đến tài khoản đều thông qua hệ thống này.

Ví dụ, hệ thống A muốn đăng nhập thì redirect tới hệ thống passport system, sau khi đăng nhập nếu thành công sẽ lưu vào session sẽ redirect về lại A. Và hệ thống A chỉ việc dựa vào session mà xử lý, không liên quan gì đến quản lý tài khoản.

Về database thì, các table user của từng hệ thống (A,B,C,...) remove cột username và password đi (vì không cần thiết) chỉ chừa lại ID để tham chiếu đến các thông tin khác. Đồng thời tạo thêm table user để HT passport sử dụng.

Lưu ý khi add 1 user thì add vào tất cả các table user của các hệ thống.

Lấy ví dụ đơn giản:
Giả sử:
Hệ thống A có tabble A_user gồm: id,username,pass,nickname,haircolor
Hệ thống B có tabble B_user gồm: id,username,pass,phone,fax

Sau khi sửa thì:
A_user gồm: id,nickname,haircolor
B_user gồm: id,phone,fax
passport gồm: id,username,pass

Khi đăng ký user, các thông tin sẽ gồm: username, pass, nickname, haircolor, phone, fax. Vậy thì bạn cần chia các thông tin này ra và chèn vào các table tương ứng.

- Chèn user,pass vào passport table.
- truy vấn để lấy id vừa chèn (nếu id là tự động)
- Sử dụng id vừa lấy kết hợp với nickname, haircolor chèn vào A_user (để HT A có thể sử dụng)
- HT B cũng tương tự

Như vậy những ứng dụng A, B vẫn có thể truy cập thông tin bình thường vì chúng chỉ làm việc trên session, không hề đụng tới cột username và password
Kanzai viết 12:39 ngày 10/10/2018
@thuyduongcd : Cám ơn bác đã gợi ý giải pháp rõ ràng. Nhưng cho em hỏi thêm : như vậy cơ bản thì không cần chỉnh sửa nhiều code các hệ thống đã có, nhưng mình sẽ gom tất cả table vào trong 1 database, sử dụng prefix để phân biệt (A_user, B_user, C_user, A_product, B_department, ...), đúng không bác ?
BnoL viết 12:46 ngày 10/10/2018
SSO http://en.wikipedia.org/wiki/Single_sign-on
thuyduongcd viết 12:34 ngày 10/10/2018
Bạn vẫn có thể không gom các hệ thống vào cùng 1 DB vẫn không sao vì cơ bản chúng không dùng chung DB với nhau. Nhưng nếu muốn dễ backup hoặc bảo trì, bạn có thể gom chúng lại cũng tốt.

Khi gom lại chung DB, nếu có 2 table user của 2 hệ thống trùng tên thì bắt buộc bạn phải thay đổi 1 trong 2 (và khi đó thì phải thay đổi câu query trong code của HT tương ứng). Còn nếu chúng không trùng tên nhau thì cứ giữ nguyên cũng chẳng hề gì (để khỏi phải thay đổi trong code).

Nói chung là table nào trùng tên thì phải đổi. Không trùng tên thì đổi hay không cũng được (đổi thì dễ quản lý nhưng mất công đổi trong code)
Kanzai viết 12:40 ngày 10/10/2018
Cám ơn các bác nhiều. Em sẽ tiến hành làm đây. Có thắc mắc gì em sẽ hỏi tiếp
Bài liên quan
0