权限管理、用户权限系统、开源用户权限系统、信息化建设标准基础数据管理平台
代码改变世界

通用权限管理系统组件 (GPM - General Permissions Manager) 给信息管理系统加一个初始化的功能,调用存储过程

  通用C#系统架构  阅读(1983)  评论(4编辑  收藏  举报

   系统初始化的运行效果如下:

   吉日嘎拉,通用权限管理系统组件

    参数表是为了防止反复被初始化的,防止关键数据丢失。

   吉日嘎拉,通用权限管理系统组件

   吉日嘎拉,通用权限管理系统组件

 

   其实很多人都提过希望有系统初始化的功能,最近稍微空一些,就给系统增加了一个初始化的功能,给大家参考一下。

首先写了一个存储过程如下,把系统中的表都清理干净,存储过程的名字叫“SystemInitialize”

复制代码
View Code
-- =============================================
-- Author:        <吉日嘎拉>
-- Create date: <2012.01.18>
-- Description:    <初始化系统>
-- =============================================
ALTER PROCEDURE [dbo].[SystemInitialize] 
AS
BEGIN
    SET NOCOUNT ON;
    
    -- 检查是否已经初始化过系统?只允许初始化一次
    DECLARE @Worked int;
    SELECT @Worked = Worked FROM Base_Parameter WHERE ID = 10000000 AND ParameterContent = 'None';
    
    IF @Worked > 0
    BEGIN
      RETURN;
    END

    -- 名片管理
    TRUNCATE TABLE Base_Businesscard;
    -- 评论表
    TRUNCATE TABLE Base_Comment;
    -- 联络单明细表
    TRUNCATE TABLE Base_ContactDetails;
    -- 联络单主表
    TRUNCATE TABLE Base_Contact;
    -- 系统异常表
    TRUNCATE TABLE Base_Exception;
    -- 文件表
    TRUNCATE TABLE Base_File;
    -- 文件夹表
    TRUNCATE TABLE Base_Folder;
    -- 数据字典主表(资源)
    -- Base_Items
    -- 工作流示例—请假单表
    TRUNCATE TABLE Base_Leave;
    -- 系统日志表
    TRUNCATE TABLE Base_Log;
    -- 消息表
    TRUNCATE TABLE Base_Message;
    -- 模块(菜单)表 通用权限以外的全删除
    DELETE FROM Base_Module WHERE AllowDelete = 1;
    -- 组织机构、部门表 删除的测试数据
    DELETE FROM Base_Organize WHERE IsInnerOrganize = 1;
    -- 新闻表
    TRUNCATE TABLE Base_News;
    -- 系统参数配置表
    DELETE FROM Base_Parameter WHERE (ID <> 10000000);
    -- 操作权限存储表
    TRUNCATE TABLE Base_Permission;
    -- 数据集权限存储表
    TRUNCATE TABLE Base_PermissionScope;
    -- 操作权限项定义 删除通用权限意外的全部权限定义
    DELETE FROM Base_PermissionItem WHERE AllowDelete = 1;
    -- 项目表
    TRUNCATE TABLE Base_Project;
    -- 员工(职员)表组织关系表
    TRUNCATE TABLE Base_StaffOrganize;
    -- 员工(职员)表
    TRUNCATE TABLE Base_Staff;
    -- 序列产生器表
    TRUNCATE TABLE Base_Sequence;
    -- 表字段结构定义说明
    TRUNCATE TABLE Base_TableColumns;
    -- 用户送货地址表
    TRUNCATE TABLE Base_UserAddress;
    -- 用户帐户组织关系表
    TRUNCATE TABLE Base_UserOrganize;
    -- 用户帐户角色关系表
    TRUNCATE TABLE Base_UserRole;
    -- 用户帐户表
    DELETE FROM Base_User WHERE UserName != 'Administrator';
    -- 系统角色表
    DELETE FROM Base_Role WHERE Code != 'Administrators';
    -- 工作日志表
    TRUNCATE TABLE Base_WorkReport;
    
    -- 设置已初始化标志,防止反复初始化系统
    UPDATE Base_Parameter SET Worked = 1, ParameterContent = 'Processed' WHERE ID = 10000000;

END
复制代码

   在通用权限管理系统组件中调用存储过程的方法如下

复制代码
View Code
        private void btnInitialize_Click(object sender, EventArgs e)
        {
            // 默认按钮放在第2个按钮上,尽量防止误操作。
            if (MessageBox.Show(AppMessage.MSG3000, AppMessage.MSG0000, MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK)
            {
                // 按系统的配置信息动态获取数据库连接
                using (IDbHelper dbHelper = DbHelperFactory.GetHelper(BaseSystemInfo.UserCenterDbType))
                {
                    try
                    {
                        // 打开数据库连接
                        dbHelper.Open(BaseSystemInfo.UserCenterDbConnection);
                        // 执行存储过程
                        int returnValue = dbHelper.ExecuteNonQuery(CommandType.StoredProcedure, "SystemInitialize");
                        // 成功的提示信息
                        MessageBox.Show(AppMessage.MSG3010, AppMessage.MSG0000, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.btnInitialize.Enabled = false;
                    }
                    catch (Exception ex)
                    {
                        // 在本地文件中记录系统异常信息
                        this.WriteException(ex);
                        throw ex;
                    }
                    finally
                    {
                        // 关闭数据库库连接
                        dbHelper.Close();
                    }
                }
            }
        }
复制代码

    判断当前用户是否已经登录,当前用户是否超级管理员,当前连接的数据库类型等的参考代码如下

复制代码
View Code
        public override void SetControlState()
        {
            // 已经登录了系统,并且是系统管理员才可以做这个服务器端的配置,第一次用时无法配置系统了
            /*
            if (!BaseSystemInfo.LogOned || !this.UserInfo.IsAdministrator)
            {
                this.tcConfirm.TabPages.Remove(tpServer);
            }
            
*/
            // 有并发数设置时,不允许重复登录。
            if (this.nupOnLineLimit.Value > 0)
            {
                this.chkCheckOnLine.Checked = false;
                this.chkCheckOnLine.Enabled = false;
            }
            else
            {
                this.chkCheckOnLine.Enabled = true;
            }
            // 只有系统管理员才可以初始化系统,并却是sqlserver数据库下才运行
            this.btnInitialize.Visible = BaseSystemInfo.LogOned && BaseSystemInfo.UserInfo.IsAdministrator;
            if (this.btnInitialize.Visible)
            {
                if (BaseSystemInfo.UserCenterDbType == DataBaseType.SqlServer)
                {
                    string parameter = DotNetService.Instance.ParameterService.GetParameter(UserInfo, "System""System""Initialize");
                    if (!string.IsNullOrEmpty(parameter) && parameter.Equals("None"))
                    {
                        this.btnInitialize.Enabled = true;
                    }
                }
            }
        }
复制代码

    给大家分享一下比较强大的完整的数据库访问组件,经过了7-8年的考研,运行稳定,编码风格良好,完整源码下载地址如下:

    /Files/jirigala/DotNet.Utilities.rar 

  源码效果图如下:

   

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2011-01-18 操作权限是如何定义的?如何设置操作权限?回答客户实现每个操作人员不同操作权限的疑问


C# ASP.NET 通用权限设计、通用权限管理、通用权限组件、单点登录、集中式权限管理、统一授权体系、分级管理分级授权


微信扫一扫加好友



点击右上角即可分享
微信分享提示