zoukankan      html  css  js  c++  java
  • 权限管理用户与模块关系

    用户与模块关系功能,您可以写成跟用户与角色关系一样。不过下面实现方法会看到更多的权限控制。

    介面如下截图:

    数据表结构如下:

    代码
    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    CREATE TABLE [dbo].[UsersModule](
        
    [UsersId] [int] NOT NULL,
        
    [ModuleId] [smallint] NOT NULL,
        
    [Purview] [int] NOT NULL
    ON [PRIMARY]

    GO

    ALTER TABLE [dbo].[UsersModule]  WITH CHECK ADD  CONSTRAINT [FK_UsersModule_Module] FOREIGN KEY([ModuleId])
    REFERENCES [dbo].[Module] ([ModuleId])
    ON UPDATE CASCADE
    ON DELETE CASCADE
    GO

    ALTER TABLE [dbo].[UsersModule] CHECK CONSTRAINT [FK_UsersModule_Module]
    GO

    ALTER TABLE [dbo].[UsersModule]  WITH CHECK ADD  CONSTRAINT [FK_UsersModule_Users] FOREIGN KEY([UsersId])
    REFERENCES [dbo].[Users] ([UsersId])
    ON UPDATE CASCADE
    ON DELETE CASCADE
    GO

    ALTER TABLE [dbo].[UsersModule] CHECK CONSTRAINT [FK_UsersModule_Users]
    GO

      

    接下来,我们得写分配权限的存储过程:

    代码
    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    CREATE PROCEDURE [dbo].[usp_UsersModule_AssignModuleAction]
    (
        
    @UsersId int,
        
    @ModuleId smallint,    
        
    @Browsing bit,
        
    @Searching bit,
        
    @Creating bit,
        
    @Editing bit,
        
    @Updating bit,
        
    @Deleting bit,
        
    @Erasing bit,
        
    @Submiting bit,
        
    @Auditing bit,
        
    @Reporting bit,
        
    @Receiving bit,
        
    @Delivering bit    
    )
    AS
    BEGIN TRANSACTION
        
    DECLARE @Purview int =0    
        
        
    IF @Browsing = 1
            
    SET @Purview = @Purview + 1
        
    IF @Searching = 1
            
    SET @Purview = @Purview + 2
        
    IF @Creating = 1  
            
    SET @Purview = @Purview + 4
         
    IF @Editing = 1 
            
    SET @Purview = @Purview + 8
         
    IF @Updating = 1 
            
    SET @Purview = @Purview + 16
         
    IF @Deleting= 1  
            
    SET @Purview = @Purview + 32
         
    IF @Erasing = 1
            
    SET @Purview = @Purview + 64
         
    IF @Submiting = 1
            
    SET @Purview = @Purview + 128
         
    IF @Auditing = 1
            
    SET @Purview = @Purview + 256
         
    IF @Reporting = 1
            
    SET @Purview = @Purview + 512         
         --如果有更多操作权限,可以此添加 
          
    IF @Purview >0 AND @Browsing =0
            
    SET @Purview = @Purview +1
        
    IF (SELECT count(*)  FROM [UsersModule] WHERE [UsersId] = @UsersId AND [ModuleId] = @ModuleId )>0
        
    BEGIN        
            
    UPDATE [UsersModule] SET [Purview]=@Purview WHERE [UsersId] = @UsersId AND [ModuleId] = @ModuleId 
            
    IF @@ERROR<>0            
                
    ROLLBACK TRANSACTION    
        
    END
    ELSE
        
    BEGIN
            
    INSERT INTO [UsersModule] ([UsersId] ,[ModuleId],[Purview] ) VALUES (@UsersId ,@ModuleId ,@Purview)
            
    IF @@ERROR<>0            
                
    ROLLBACK TRANSACTION    
        
    END
            
    COMMIT TRANSACTION

    GO
  • 相关阅读:
    java 正则表达式匹配指定变量并替换
    Tomcat 架构原理解析到架构设计借鉴
    优雅的缓存写法,以及synchronized 和 ReentrantLock性能 PK
    应用开发笔记|MYD-YA157-V2开发板CAN BUS 总线通信实例
    Arm Keil MDK V5.33版本更新,欢迎下载!
    Arm Development Studio 2020.1版本下载更新
    设计模式 | 享元模式(Flyweight)
    设计模式 | 中介者模式/调停者模式(Mediator)
    设计模式 | 职责链模式(Chain of responsibility)
    设计模式 | 命令模式(Command)
  • 原文地址:https://www.cnblogs.com/insus/p/1776623.html
Copyright © 2011-2022 走看看