基於「用戶-角色-功能」的 RBAC 模型,將權限配置存儲於數據庫,登錄後動態加載並應用到界面控件。
-- 用戶表
CREATE TABLE Users (UserID INT PK, Username VARCHAR(50), RoleID INT FK);
-- 功能/權限表
CREATE TABLE Functions (FuncID INT PK, FuncName VARCHAR(50), ControlTag VARCHAR(50));
-- 角色權限關聯表
CREATE TABLE RoleFunctions (RoleID INT FK, FuncID INT FK);
FuncID 集合。Tag 屬性匹配 ControlTag。control.Enabled = false 或 control.Visible = false。private void ApplyPermissions(int userId) {
var allowedTags = db.GetAllowedControlTags(userId); // 返回 List
foreach (Control ctrl in this.Controls) {
if (ctrl.Tag != null && !allowedTags.Contains(ctrl.Tag.ToString())) {
ctrl.Enabled = false;
}
}
}
可進一步封裝為權限管理組件,支持菜單、按鈕、列表列等不同粒度的控制;結合緩存減少數據庫查詢壓力。