Custom Userlevel

this sample will show you how you can create custom level and it help you specially when you have form and has one detail and multi details so there is no need to give permission to all the tables in the same screens so by example you can create permission like the menu item :

/****** Object:  Table [dbo].[GroupParent]    Script Date: 7/4/2025 11:20:33 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[GroupParent](
	[ID] [int] NOT NULL,
	[Name] [nvarchar](200) NULL,
 CONSTRAINT [PK_GroupParent] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

/****** Object:  Table [dbo].[GroupMenuTable]    Script Date: 7/4/2025 11:20:41 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[GroupMenuTable](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[GroupMenu_ID] [int] NULL,
	[GMTableName] [nvarchar](200) NULL,
 CONSTRAINT [PK_GMenuTable] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO



CREATE TABLE [dbo].[GroupMenu_UL](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[UserLevelID] [int] NULL,
	[GroupParent_ID] [int] NULL,
	[GroupMenu_ID] [int] NULL,
	[Permission] [int] NULL,
	[canAdd] [bit] NULL,
	[canDelete] [bit] NULL,
	[canEdit] [bit] NULL,
	[canList] [bit] NULL,
	[canView] [bit] NULL,
	[canSearch] [bit] NULL,
 CONSTRAINT [PK_GroupMenu_UL] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO




create VIEW [dbo].[vUserLevel] AS SELECT

 dbo.UserLevels.UserLevelID, dbo.UserLevels.UserLevelName FROM dbo.UserLevels
 where UserLevelID<>-1


GO




CREATE VIEW [dbo].[vUserGroupstpl]
AS
SELECT        dbo.UserGroupstpl.ID, dbo.UserGroupstpl.Name, dbo.ScreenType.Name AS Name1, dbo.UserGroupstpl.Section
FROM            dbo.UserGroupstpl INNER JOIN
                         dbo.ScreenType ON dbo.UserGroupstpl.TypeID = dbo.ScreenType.ID
GO


Create procedure   [dbo].[AfterUpdateUserLevels]
(@P int)

AS

begin


declare @TID int

select @TID=@P  

delete from UserLevelPermissions where UserLevelID =@TID

insert into UserLevelPermissions 


select @TID , concat('{06418C4F-66A7-4CF6-9B81-22B00EBEB26D}',b.GMTableName),canAdd*1 + canDelete*2 + canEdit*4 + canList*8 + canView*32 + canSearch*64 from GroupMenu_UL a
 inner join GroupMenuTable b on a.Groupmenu_ID=b.GroupMenu_ID
where  a.UserLevelID=@TID


end