mysql。PHP 後臺權限管理 模塊

mysql。PHP 後臺權限管理 模塊mysql

 

背景:訂單系統後臺權限管理ajax

 

功能要求:redis

  1. 能夠設置人員角色
  2. 能夠設置員工所屬部門
  3. 員工對訪問頁面,按鈕,請求數據查看。只能看到受權後的。

 

 

方案:sql

  1. 員工信息表,保存員工基本信息,用 session 保存,登出後清理 ssesion 。
  2. 部門表,保存好員工部門基礎信息,而且建字段 parent_id ,支撐無限極部門管理,書寫遍歷部門樹公用方法,部門表做爲基礎表,提拱主 id 到部門信息表中記錄下員工部門信息。
  3. 角色表,正式控制訪問權限的表,記錄設置訪問權限ID,用以判斷權限。
  4. 角色和部門無惟一限制,員工信息能夠跨部門。故員工表保留 department_id 爲 text, 數據存爲 json ; 角色表保留 role_id 爲 text, 數據存爲 json 。
  5. 員工會存在於其餘系統中,那麼有一個 員工 id, 存在於oa系統,各下游系統也會保留 該ID

 

 

表設計數據庫

 

用戶表 dp_system_userjson

字段session

類型app

默認值elasticsearch

備註spa

id

int 11

not null

角色id

email

varchar 64

not null

員工名,寫入爲員工擁有公司郵箱

gid

int 11

not null

系統 ID

account

varchar 32

not null

員工名

department_id

text 多個部門 656578

not null

部門 ID

is_delete

boolean

0

是否可用

add_time

int 10

not null

添加時間

update_time

int 10

not null

更新時間

append_id

int 11

not null

添加人ID

role_id

text

not null

角色id

 

部門表 dp_system_department

字段

類型

默認值

備註

id

int 11

not null

部門 id

department_name

varchar 64

not null

部門名稱

parent_id

int 11

0

上級部門 id

add_time

int 10

not null

添加時間

append_id

int 11

not null

添加人ID

is_delete

tinyint

not null

是否刪除

 

角色表 dp_system_role

字段

類型

默認值

備註

id

int

not null

角色id

role_name

varchar 100

not null

角色名

add_time

int 10

not null

添加時間

append_id

int 10

not null

添加人ID

is_delete

tinyint

not null

是否刪除

 

常見模型 rbac (rolu based access control ) 基於角色訪問控制,由於角色多起來管理不便,因此引用了權限組,部門的概念。部門主要職責就是批量受權

 

然而開始設置權限就須要一個表來存容許訪問的 模塊信息與用戶信息

 

模塊表 dp_system_template

字段

類型

默認值

備註

例子

id

int 11

not null

模塊id

1

template_code

varchar 64

not null

模版code

order.order_list

template_name

varchar 64

not null

模版 名字

訂單查詢列表

add_user

int 11

not null

添加人

45

last_time

int 10

not null

修改時間

154234657

is_delete

boolean

not null

是否可用

0

 

 

容許訪問信息表dp_system_permission

字段

類型

默認值

備註

id

int 11

not null

id

role_id

int 11

not null

權限ID

template_id

int 11

not null

模版id

 

模塊可能無限增加,方便查詢效率高,模塊ID與 權限ID 多對多存儲。

 

後來mysql主表日增數據 100,000。經歷三個月,數據量到達 9,000,000。業務員2000,每次訪問數據,先篩選能夠訪問的權限店鋪,而後 in 範圍查詢,形成查詢壓力旁大,解決方案:

案例sql

select * from om_unshipped_order where id in (29765473,,,,,省略4000id)and accountId in(567,,,省略200id)limit 50。

1,備份數據庫,一個月備份一次,備份出完結訂單涉及的表數據,減小數據庫壓力。

2,能夠作成查詢延後,首次告訴已經接受請求請稍後,ajax輪訓,監控結果,後臺PHP分頁運行計算結果後,放入一個文件中,文件內容只含有orderid,一行一個,便於頁面讀取分頁讀取數據,二次查詢數據庫查詢出結果,文件名用sessionid,中途查詢關係存放到redis,保證計算出正確的文件名,方便獲取文件。

3,另一個思路,整合數據到mysql表,用於檢索須要得數據,或者放入elasticsearch,計算出咱們的結果。

4,一個思路,若是是spu,這樣的查詢,經過規則整合成int 整型,查詢就僅僅須要取出數字區間,很是快

相關文章
相關標籤/搜索