Exemplo n.º 1
0
 public ITFolderPrivilege(FolderPrivilegesItem value)
     : base(value.Name, value.Description)
 {
     m_value = value.Value;
 }
Exemplo n.º 2
0
        public bool HasFolderPrivilege(ITUser user, FolderPrivileges privilege, DomainObjectData xobjFolder, XStorageConnection con)
        {
            // т.к. компонент может использоваться не только через методы XSecurityManager: GetObjectRights, HasSaveObjectRights, etc.
            if (user.IsUnrestricted)
            {
                return(true);
            }
            string sPrivilege = FolderPrivilegesItem.GetItem(privilege).Name;

            Guid         orgID;
            Guid         activityTypeID;
            FolderStates folderState;

            if (xobjFolder.IsNew)
            {
                if (!xobjFolder.HasUpdatedProp("Customer") || xobjFolder.GetUpdatedPropValue("Customer") == DBNull.Value)
                {
                    return(false);
                }
                orgID = (Guid)xobjFolder.GetUpdatedPropValue("Customer");

                if (!xobjFolder.HasUpdatedProp("ActivityType") || xobjFolder.GetUpdatedPropValue("ActivityType") == DBNull.Value)
                {
                    return(false);
                }
                activityTypeID = (Guid)xobjFolder.GetUpdatedPropValue("ActivityType");

                if (!xobjFolder.HasUpdatedProp("State") || xobjFolder.GetUpdatedPropValue("State") == DBNull.Value)
                {
                    return(false);
                }
                folderState = (FolderStates)xobjFolder.GetUpdatedPropValue("State");
            }
            else
            {
                if (!xobjFolder.HasLoadedProp("Customer") || !xobjFolder.HasLoadedProp("ActivityType") || !xobjFolder.HasLoadedProp("Parent") || !xobjFolder.HasLoadedProp("State"))
                {
                    xobjFolder.Load(con);
                }

                orgID          = (Guid)xobjFolder.GetLoadedPropValue("Customer");
                activityTypeID = (Guid)xobjFolder.GetLoadedPropValue("ActivityType");
                folderState    = (FolderStates)xobjFolder.GetLoadedPropValue("State");
            }

            // в закрытой папке ни у кого нет никаких привилегий
            if (folderState == FolderStates.Closed)
            {
                return(false);
            }

            if (user.ManageOrganization(orgID) || user.ManageActivityType(activityTypeID))
            {
                return(true);
            }

            if (!xobjFolder.IsNew)
            {
                // для объекта из БД, проверим определение привилегий для участника проекта заданной и вышестоящих папок
                if (m_folderPrivilegesDefinitionContainer.GetPrivileges(user, xobjFolder.ObjectID, con).Contains(sPrivilege))
                {
                    return(true);
                }
            }
            else
            {
                // Для нового объекта зачитывать привилегии из БД бессмысленно -
                // проверим ссылку на родителя, если она задана, то зачитаем его привилегии
                object vValue = xobjFolder.GetUpdatedPropValue("Parent");
                if (vValue is Guid)
                {
                    if (m_folderPrivilegesDefinitionContainer.GetPrivileges(user, (Guid)vValue, con).Contains(sPrivilege))
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
Exemplo n.º 3
0
 public static XPrivilegeSet CreatePrivilegeSet(FolderPrivileges nPrivilegeMask)
 {
     FolderPrivilegesItem[] items = FolderPrivilegesItem.GetItems(nPrivilegeMask);
     return(CreatePrivilegeSet(items));
 }
Exemplo n.º 4
0
 public override IEnumerable <ACLModel> Privilege
     (string key) => FolderPrivileges.Search(key, TierSearchOrder);