如何允许用户只能在XAF中编辑他的项目

时间:2013-05-21 09:02:49

标签: c# permissions devexpress roles xaf

我有一个公司用户和产品类
每个用户都可以创建x数量的产品。 我只希望每个用户能够查看彼此的产品,但只能编辑自己的产品。

我创建了一个名为ProductPeople的角色,该类型具有我分配给CompanyUsers的Product类的类型权限(该角色具有所有权限,读写导航等)。
我在哪里设置只有userX可以编辑/删除自己产品的标准?

2 个答案:

答案 0 :(得分:2)

以下是updater类的代码。它将为基础程序集中的所有对象创建权限。你需要一个受限制的baseobject类来实现它,它应该定义两个属性,CreatedBy是TeamMember(SecuritySystemUser后代)和Restricted,它表示是否要特别限制属性。如果您现在将Restricted标记为已选中,则应该隐藏除了创建它的用户之外的所有对象。

注意:这仅适用于您的装配。您可以为所有引用的程序集添加另一个循环,包括BaseImp和Base。我以KPI程序集为例。

     private void CreateTeamRole()
    {
        SecuritySystemRole Role = ObjectSpace.FindObject<SecuritySystemRole>(new BinaryOperator("Name", "Team"));
        if (Role != null)
            return;
        Role = ObjectSpace.CreateObject<SecuritySystemRole>();
        Role.Name = "Team";
        Role.CanEditModel = true;
        Role.SetTypePermissions<SecuritySystemUser>(SecurityOperations.Read, SecuritySystemModifier.Allow);
        Role.SetTypePermissions<SecuritySystemRole>(SecurityOperations.Read, SecuritySystemModifier.Allow);
        Role.SetTypePermissions<TeamMember>(SecurityOperations.ReadWriteAccess, SecuritySystemModifier.Allow);
        Role.SetTypePermissions<TeamMember>(SecurityOperations.Navigate, SecuritySystemModifier.Allow);
        foreach (var item in System.Reflection.Assembly.GetAssembly(typeof(DevExpress.ExpressApp.Kpi.KpiDefinition)).GetTypes())
            if (item.IsSubclassOf(typeof(XPBaseObject)))
                Role.SetTypePermissions(item, SecurityOperations.FullAccess, SecuritySystemModifier.Allow);
        Role.SetTypePermissions<XPWeakReference>(SecurityOperations.FullAccess, SecuritySystemModifier.Allow);
        foreach (var item in System.Reflection.Assembly.GetAssembly(typeof(BaseObject)).GetTypes())
        {
            if (item.IsSubclassOf(typeof(XPBaseObject)) && !item.Equals(typeof(TeamMember)))
            {
                if (item.IsSubclassOf(typeof(RestrictedBaseObject)))
                {
                    Role.SetTypePermissions(item, "Create;Navigate;Delete", SecuritySystemModifier.Allow);
                    Role.AddObjectAccessPermission(item, "!Restricted or [CreatedBy.Oid] = CurrentUserId()", SecurityOperations.ReadWriteAccess);
                }
                else
                    Role.SetTypePermissions(item, SecurityOperations.FullAccess, SecuritySystemModifier.Allow);
            }
        }
    }

答案 1 :(得分:0)

据我了解您的问题,您只使用了类型许可。为了能够表达您想要的内容,您必须使用objectpermissions。对于SecuritySystemObjectPermissionsObject类型的对象,您可以指定一个条件,通过该条件可以表达对“自己的产品”的限制。