把控制的页面分类,即以模块来分类,如同角色所拥有页面一样,最终我们只为用户分配某一模块,来控制到用户只能访问相关的页面。
asp.net前端介面:
在数据库,表[ModulePages]结构如下,代码参考角色与页面关系表结构一样:
实现为模块分配页面的事件,还得写分配事件的存储过程:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
SET
ANSI_NULLS
ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [ dbo ] . [ usp_ModulePages_AssignPagesAction ]
(
@ModuleId smallint ,
@PagesId int ,
@IsEnable bit
)
AS
BEGIN TRANSACTION
DECLARE @err int
IF ( SELECT count ( * ) FROM [ ModulePages ] WHERE [ ModuleId ] = @ModuleId AND [ PagesId ] = @PagesId ) > 0
BEGIN
UPDATE [ ModulePages ] SET [ IsEnable ] = @IsEnable WHERE [ ModuleId ] = @ModuleId AND [ PagesId ] = @PagesId
SET @err = @@ERROR
IF @err <> 0
ROLLBACK TRANSACTION
END
ELSE
BEGIN
INSERT INTO [ ModulePages ] ( [ ModuleId ] , [ PagesId ] , [ IsEnable ] ) VALUES ( @ModuleId , @PagesId , @IsEnable )
SET @err = @@ERROR
IF @err <> 0
ROLLBACK TRANSACTION
END
COMMIT TRANSACTION
GO
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [ dbo ] . [ usp_ModulePages_AssignPagesAction ]
(
@ModuleId smallint ,
@PagesId int ,
@IsEnable bit
)
AS
BEGIN TRANSACTION
DECLARE @err int
IF ( SELECT count ( * ) FROM [ ModulePages ] WHERE [ ModuleId ] = @ModuleId AND [ PagesId ] = @PagesId ) > 0
BEGIN
UPDATE [ ModulePages ] SET [ IsEnable ] = @IsEnable WHERE [ ModuleId ] = @ModuleId AND [ PagesId ] = @PagesId
SET @err = @@ERROR
IF @err <> 0
ROLLBACK TRANSACTION
END
ELSE
BEGIN
INSERT INTO [ ModulePages ] ( [ ModuleId ] , [ PagesId ] , [ IsEnable ] ) VALUES ( @ModuleId , @PagesId , @IsEnable )
SET @err = @@ERROR
IF @err <> 0
ROLLBACK TRANSACTION
END
COMMIT TRANSACTION
GO