0

我在我的 XAF 项目中使用新的安全系统。我创建了自定义安全类“ExtendedSystemSecurityRole”和“SecuritySystemUser”。在 Updater 类中,我创建了一个名为“G1”的角色及其权限,如下所示。但是运行时,用户“John”看不到“买家”表单。

ExtendedSecuritySystemRole basicUserRole = ObjectSpace.FindObject<ExtendedSecuritySystemRole>(new BinaryOperator("Name", "G1"));
        if (basicUserRole == null)             
        {
            basicUserRole = ObjectSpace.CreateObject<ExtendedSecuritySystemRole>();
            basicUserRole.Name = "G1";
            SecuritySystemTypePermissionObject userTypePermission =
                ObjectSpace.CreateObject<SecuritySystemTypePermissionObject>();
            userTypePermission.TargetType = typeof(Buyer);
            SecuritySystemObjectPermissionsObject currentUserObjectPermission =
                ObjectSpace.CreateObject<SecuritySystemObjectPermissionsObject>();

            currentUserObjectPermission.Criteria = "[Active] = True";
            currentUserObjectPermission.AllowNavigate = true;
            currentUserObjectPermission.AllowRead = true;
            userTypePermission.ObjectPermissions.Add(currentUserObjectPermission);
            basicUserRole.TypePermissions.Add(userTypePermission);
        }
        ExtendedSecuritySystemUser userJohn =
            ObjectSpace.FindObject<ExtendedSecuritySystemUser>(
            new BinaryOperator("UserName", "John"));
        if (userJohn == null)
        {
            userJohn = ObjectSpace.CreateObject<ExtendedSecuritySystemUser>();
            userJohn.UserName = "John";
            userJohn.SetPassword("");
            userJohn.Roles.Add(basicUserRole);
        }
4

1 回答 1

0

你的标准是说Buyer.Active = True不是ExtendedSecuritySystemUser.Active = true

可以 创建自己的函数运算符 IsCurrentUserActive()

为此使用 a 会更简单ViewController。就像是:

public class InactiveUsersController : ViewController
{
    public InactiveUsersController()
    {
        this.TargetViewNesting = Nesting.Any;
        this.TargetViewType = ViewType.ListView;
        this.TargetObjectType = typeof(Buyer);
    }

    protected override void OnActivated()
    {
        base.OnActivated();
        ListView listView = View as ListView;
        listView.CollectionSource.Criteria.Remove("InactiveUserFilter"); // clear the filter

        var currentUser = SecuritySystem.CurrentUser as ExtendedSecuritySystemUser;
        if (!currentUser.Active)
        {
            // return empty list if user is inactive
            listView.CollectionSource.Criteria.Add("InactiveUserFilter", CollectionSource.EmptyCollectionCriteria); 
        }
    }
}
于 2014-10-08T17:26:34.317 回答