微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将用户目录绑定到系统用户列表 (1C:Enterprise 8.3)

如何解决如何将用户目录绑定到系统用户列表 (1C:Enterprise 8.3)

我想将系统用户列表与我的员工目录绑定,以便我可以存储其他用户信息并基于当前用户创建 RLS 访问限制。

所以,我在员工目录中创建了 ID 属性,并在 ItemForm 模块中编写了这段代码

&AtClient
Procedure IDStartChoice(Item,ChoiceData,StandardProcessing)
    
    // Fill out the list of system users to choose from
    StandardProcessing = False;
    ChoiceData = GetUserList();
    
EndProcedure

&AtClient
Procedure IDChoiceProcessing(Item,SelectedValue,StandardProcessing)
    
    // Fill out Users catalog item data
    StandardProcessing = False;
    ThisForm.Object.ID = SelectedValue;
    Object.ID = GetIDUser(SelectedValue);
    
EndProcedure

&AtServerNoContext
// Read the list of system users
Function GetUserList()
    
    UserList = New ValueList;
    UserArray = InfobaseUsers.GetUsers();
    
    For Each SystemUser In UserArray do
        UserList.Add(SystemUser.UUID,SystemUser.FullName); 
    EndDo;

    Return UserList;
    
EndFunction 

&AtServerNoContext
Function GetIDUser(UserID)
    
    If ValueIsFilled(UserID) then
        SetPrivilegedMode(True);
        Return InfobaseUsers.FindByUUID(UserID).FullName;
    EndIf;  
    
EndFunction 

这里的想法是这行代码 Object.ID = GetIDUser(SelectedValue); 读取当前系统用户 ID 并将其存储到目录中。

我还创建了 CurrentUser 会话参数并将其值设置为属于会话模块中当前系统用户的 CatalogRef.Employees,如下所示:

Procedure SessionParameteRSSetting(requiredParameters)
    
    // Set the CurrentUser session parameter value
    SetPrivilegedMode(True);
    CurrentUser = InfobaseUsers.CurrentUser();
    SessionParameters.CurrentUser = Catalogs.Employees.FindByAttribute("ID",CurrentUser.UUID);
    
EndProcedure

我将这个 Read RLS 限制添加到 Emlopoyees 目录:WHERE Ref = &CurrentUser,但是当我在任何特定用户下打开它时,我仍然可以看到所有用户(未过滤):

Should see Mesut only,not all the users

请帮忙!

Here is the DT file with the app

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。