iT邦幫忙

0

停車場系統多層權限資料庫設計

  • 分享至 

  • xImage

我正在嘗試開發一個多層次權限管理系統,並希望在這方面獲得一些技術上的建議。目前我有以下的設想:

權限分為四個層次:

  • 系統管理員(admin) > 超級使用者(super user)
  • 多個公司管理人 > 可新增公司負責人並查看多間公司及其場域資料
  • 公司負責人 > 可新增員工並查看所有公司場域及員工
  • 公司員工 > 只能查看特定場域

目前的資料庫設計如下:

https://ithelp.ithome.com.tw/upload/images/20230621/20137930JporRukJN9.png

我目前主要在設計權限划分的部分,但由於我是資料庫新手,覺得自己無法深入思考未來可能出現的效能問題或權限衝突,也擔心是否在未來需要使用到群組(group)或單一登入(SSO)等其他技術時會遇到問題。現在的想法會想先把權限表整理到users裡面用jason/list格式表示管理的公司或場域,不然新增一個權限就多一條資料,感覺很浪費資源,要JOIN也會影響查詢速度。

有大神能夠提供一些建議嗎/images/emoticon/emoticon02.gif或是指點我應該在哪些方面尋找更多資料和靈感。

以下是可能會遇到的情況:

  • 一個員工需要管理不同公司底下的場域。
  • 登入帳號密碼不同公司可能會有相同的情況(因為每間公司需要獨立運作,所以我在登入畫面上打算加入輸入公司統編及帳號密碼的功能)。

如果還有其他需要說明的地方,請隨時告訴我。

看更多先前的討論...收起先前的討論...
請問,「超級使用者(super user)」的使用情境是?
froce iT邦大師 1 級 ‧ 2023-06-21 11:04:28 檢舉
1. 多個公司管理人和公司負責人 感覺可以整合在一起,就管理的公司是1個還是多個而已。
2. 權限表等到人員固定後,資料增長速度不會太高,甚至不太可能高到影響效能。
3. 把人員和能管理的場域做一對多處理就行

但我個人是覺得你做一個系統單一公司管理,不要一個系統做多公司管理。
頂多認證系統分開,認證完後出一個能管理的公司列表,然後導向各公司系統
結合Froce大的建議,我幫你整合一下你的權限表
Admin:系統管理者,權限最大。
Super User:公司管理者、負責人,權限小於Admin。
User:一般使用者,權限最小。
T_BIN iT邦新手 5 級 ‧ 2023-06-21 11:21:43 檢舉
SUPER USER 用來新增區域管理人(管理多間公司的情況)
需要多區分一個層級的原因是 區域管理人可以新增公司負責人而公司負責人只能新增該公司員工
目的讓SUPER USER做最少事 把權限分出去
如果意象化的話
區域管理人就相當於「集團總經理」
公司負責人相當於「集團下子公司總經理」
這樣對嗎?
T_BIN iT邦新手 5 級 ‧ 2023-06-21 11:42:04 檢舉
可以這樣想 但這套系統是設計來給不同公司使用的
所以區域管理人會是我司的人
例如負責管理北區使用這套系統的公司 幫他們做啟用的動作
froce iT邦大師 1 級 ‧ 2023-06-21 13:17:10 檢舉
> 可以這樣想 但這套系統是設計來給不同公司使用的
所以區域管理人會是我司的人

所以我才會跟你說不該全部公司混在一起,改天一個公司出問題,全部都一起出你會壓力很大。
T_BIN iT邦新手 5 級 ‧ 2023-06-21 13:39:45 檢舉
懂您的意思,那麼我目前只需要設計您說的認證系統就好後面再串接該公司系統,那麼這樣的db設計還能怎麼改進呢?
針對您說的3. 把人員和能管理的場域做一對多處理就行,我原本也是這樣想的
但是我試算一下,若一個人管十個場一間公司100位員工十家公司的話,
這樣光permission table就有10000筆..請問以您的經驗這樣是可被接受的設計方式嗎?
froce iT邦大師 1 級 ‧ 2023-06-21 13:55:23 檢舉
拆系統你十家公司不就只有 1000筆/家 了?
而且10000筆這量級對現代的RMDB應該是還好。

基本上我會這樣設計啦
1. user table
id name is_admin

2. location
id location company

3. user premission
id user_id location_id

4. 管理紀錄

登錄的時候吐管的場域就好
但這只是粗略設計而已,實際上還是得看你的需求。

認證系統的話可能去找些SSO的設計去看。
我個人會這麼設計
user { uid, cid }
company { cid, cid-admin }
location { lid, cid,lid-admin }
lid-p { lid,uid }
邏輯
USER 查詢場域,直接找 lid-p 自己的uid 可以看到那些場域,
要看場域再點進去查 該location 的詳細資料
公司負責人
在 user 可以對相同 cid 的 user 做異動
在 company 對相同 cid 的那一筆資料做異動
在 location 對相同 cid 的 location 資料做異動
lid-p 的欄位這樣設計,基本上應該很多人都懂吧,簡單說只是一個正規化的動作
lid 跟 uid ,是必須在另外兩個表 相同的 cid 的紀錄才能在這邊組合寫入以及異動
至於 company 跟 location 有個 admin 的欄位,就是指派公司跟場域的管理者
管理者自然對這兩個表有異動的權限
ckp6250 iT邦好手 1 級 ‧ 2023-06-22 04:55:16 檢舉
公司底下可能還有部門權限,有人會跨部門,有人僅限在單一部門,
在規劃權限時,可能也要考慮進去,
就算現在用不上,早晚也會踫到。


(因為每間公司需要獨立運作,所以我在登入畫面上打算加入輸入公司統編及帳號密碼的功能)——>這是一定要的,避免把A公司的資料打進B公司
我在登入畫面上打算加入輸入公司統編 => 這完全沒有必要,他是登入後的選項,某些人員可以操作多各公司,但也要驗證身分才能進入,如果樓主有接觸過ERP 軟體,就可以知道,大多數的ERP 軟體是不需要輸入公司統編,登入之後,他要切換公司或不同的帳本,會根據權限顯示一個清單來切換,資料庫設計是一回事,APP邏輯是一回事,UI UX 還有流程又是一回事
這都要個別去設計的
我這邊做一個簡單的UI 設計

登入畫面 檢查( 帳號,密碼 )

主畫面

頁首 顯示 所屬公司基本資訊
有管理權的出現 公司切換選項 ( 清單及顯示 詳細資訊、選擇及資訊修改按鈕 )


第三段 出現場域資訊 ( 清單及顯示詳細資訊按鈕 )
有管理權的出現 ( 清單及顯示詳細資訊按鈕,包含資訊修改按鈕 )

上面就是一個基本的UI 設計,畫面越簡單越好,使用者越容易上手
T_BIN iT邦新手 5 級 ‧ 2023-06-26 15:38:17 檢舉
解釋一下我的思路,會想要在登入時區分公司統編是因為,不同公司會有一樣的名字,在註冊時必須讓他們都能註冊同一個名字也就是帳號(因為不同公司獨立系統),舉例公司只有一個Jason_huang但卻無法使用此帳號註冊的話,管理公司人員會懷疑是系統問題。在多個Jason_huang的情況下難保不會出現同密碼的情況,所以才這樣做。
因為概念跟ERP軟體類似,弱弱的問一下,他們登入這方面是限制大小寫特殊符號來避免密碼重複嗎? 對於我說的不同公司相同帳號的情況
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
海綿寶寶
iT邦大神 1 級 ‧ 2023-06-22 18:11:23
最佳解答

我的建議是:管理「功能」而不是管理「資料」
意思是,在公堂上做個假設如下:
F001 - 可新增公司負責人
F002a - 查看一間(自己本身)公司及其場域資料
F002b - 查看多間公司及其場域資料
F002c - 修改一間(自己本身)公司及其場域資料
F002d - 修改多間公司及其場域資料
F003a - 查看一間(自己本身)員工資料
F003b - 查看多間公司員工資料
F003c - 修改一間(自己本身)員工資料
F003d - 修改多間公司員工資料
然後再照你規劃的各種角色
授權相關的功能給他
例如一間公司負責人=F002a+F002c+F003b+F003d

另外
比起權限問題
我覺得這個也是很重要要考量的部份
因為每間公司需要獨立運作,所以我在登入畫面上打算加入輸入公司統編及帳號密碼的功能
記得一定要寫「記住統編/帳號」的功能
否則要我每天輸入帳號密碼就很苦瓜了
還要我輸入公司的統一編號
開什麼玩笑
/images/emoticon/emoticon09.gif

T_BIN iT邦新手 5 級 ‧ 2023-06-26 16:07:22 檢舉

有想法了,謝謝您,請問這樣的話您的權限關於user所控制的公司/場域/員工資料庫會用一對一還是一對多來設計呢

我要發表回答

立即登入回答