Я хочу отобразить Права доступа, предоставленные Пользователям для конкретного модуля.
- У меня есть семь таблиц, таких как RoleAccess, Roles, Functions, Module, SubModule, Company и Unit. RoleAccess является главной таблицей.
- Данные AccessRights будут храниться только в таблице RoleAccess.
- Таблица RoleAccess имеет следующие столбцы, такие как RoleID, CompanyID, UnitID, FunctionID, ModuleID, SubModuleID, Создать, Обновить, Удалить, Читать, Одобрить. Здесь Create_f, Update_f, Delete_f, Read_f и Approve_f являются флагами.
- Таблица компании состоит из двух столбцов, таких как CompanyID и CompanyName.
- Таблица единиц измерения имеет три столбца, такие как UnitID, UnitName и CompanyID.
- Таблица ролей имеет четыре столбца, таких как RoleID, RoleName, CompanyID и UnitID.
- Таблица модулей имеет два столбца, таких как ModuleID и ModuleName.
- Таблица SubModule имеет три столбца, такие как ModuleID, SubModuleID, SubModuleName.
- Таблица функций имеет пять столбцов, таких как FunctionID, FunctionName, ModuleID и SubModuleID.
Я хочу отобразить приведенные ниже записи в таблице RoleAccess.
ModuleName, SubModuleName, FunctionName,
CompanyID, RoleID, UnitID, FunctionID, ModuleID, SubModuleID,
Create_f, Update_f, Delete_f, Read_f and Approve_f.
Если RoleID не существует в таблице RoleAccess, он будет отображать все записи, как обычно, но со столбцами флага, равными нулю.
Я видел одну хранимую процедуру, но она отображает записи, основанные на RoleID, хранящемся в таблице RoleAccess. Но я также хочу отобразить флаги как 0 для ролей, не сохраненных в таблице RoleAccess.
Я хочу Хранимую Процедуру для этого. Любой, пожалуйста, помогите мне.
Моя хранимая процедура приведена ниже. В этом часть модуля имеет два или более подмодулей. Я не могу отобразить все подмодули в результатах поиска. Если есть только один субмодуль, то он даст правильный результат. Пожалуйста, помогите мне.
CREATE PROCEDURE [dbo].[SEC_GetAccessRight]
@CompanyID INT,
@UnitID Int,
@RoleID INT,
@ModuleID INT
AS
BEGIN
SELECT DISTINCT Module.ModuleName,
SubModule.SubModuleName,
Functions.FunctionName,
Functions.FunctionDescription,
RoleAccess.CompanyID,
RoleAccess.UnitID,
RoleAccess.RoleID,
Functions.FunctionID,
Module.ModuleID,
SubModule.SubModuleID,
ISNULL(RoleAccess.Create_f, 0) AS [CREATE],
ISNULL(RoleAccess.Update_f, 0) AS [UPDATE],
ISNULL(RoleAccess.Delete_f, 0) AS [DELETE],
ISNULL(RoleAccess.Read_f, 0) AS [READ],
ISNULL(RoleAccess.Approval_f, 0) AS [APPROVE]
FROM Module INNER JOIN SubModule
ON Module.Moduleid = SubModule.Moduleid INNER JOIN Functions
ON Module.Moduleid = Functions.Moduleid AND SubModule.SubModuleid = Functions.SubModuleid
LEFT OUTER JOIN
roleaccess ON roleaccess.Moduleid = Module.Moduleid AND roleaccess.SubModuleid = SubModule.SubModuleid
AND Functions.Functionid = roleaccess.Functionid
WHERE Module.ModuleID = (SELECT DISTINCT Module.ModuleID FROM Module INNER JOIN SubModule
on SubModule.ModuleID = Module.ModuleID LEFT OUTER JOIN
RoleAccess ON RoleAccess.ModuleID = Module.ModuleID AND RoleAccess.SubModuleID = SubModule.SubModuleID
WHERE Module.ModuleID = @ModuleID)
AND RoleAccess.RoleID = @RoleID OR RoleAccess.RoleID IS NULL
AND RoleAccess.ModuleID IS NOT NULL AND RoleAccess.SubModuleID IS NULL
END