2010-04-01 5 views
0

Je suis en train de concevoir un système sur SharePoint. Il existe une liste d'approbation pour les articles. Les membres peuvent approuver, rejeter et modifier les éléments. Un de la liste d'approbation doit remplir le champ "assigné à" dans l'article tout en l'approuvant. L'utilisateur ajouté au champ "affecté à" doit pouvoir modifier le contenu de l'élément après son approbation. Alors, comment puis-je donner l'autorisation d'édition aux utilisateurs après leur ajout assigné au champ d'un élément spécifique?Modification dynamique des autorisations d'utilisateur

La situation est:

liste d'approbation

: A, B, C (modifier, vue permission)

utilisateurs: x, y, z .... (pas l'autorisation, vue après approbation)

produits item1, item2, item3 ....

articles sont invisibles. A a approuvé le item1 et a ajouté X au champ "assigned to". Cela signifie que cet article est sous la responsabilité de X. Mais X n'a ​​pas d'autorisation d'édition. nous ne pouvons pas donner la permission d'édition à X pour chaque article. Il devrait éditer les éléments après qu'il soit écrit dans le champ "assigné à". Comment créer ce flux de travail dans SharePoint?

S'il vous plaît aide urgente nécessaire.

+0

cette une fonctionnalité dans SharePoint pour gérer l'autorisation dynamique en ajoutant des règles autorisations à la liste. [Autorisations de règles SharePoint] (https://permissionmanagement.codeplex.com) –

Répondre

1

pas 100% sûr, il est tout à fait clair ce que vous essayez d'atteindre, mais ...

De ma compréhension de votre question, ce que vous voulez faire est d'attribuer des autorisations uniques à un élément de la liste en fonction d'un valeur dans le champ affecté à cet élément de liste.

La façon dont je voudrais faire est de créer un gestionnaire d'événements pour votre liste d'articles qui fonctionne lorsque l'élément de la liste est mise à jour/approuvé etc. Il: -

  1. Lire la valeur dans le champ Assigné à
  2. Suspendre l'héritage d'autorisations sur l'élément de liste
  3. Affectez l'utilisateur aux autorisations d'édition de champ affectées à cet élément.
+0

merci de votre réponse. le système: Les travailleurs (ici travailleur1) vont créer un formulaire en remplissant des pièces spécifiques. Le formulaire est invisible pour les autres travailleurs. Une personne de Group1 doit l'approuver (au hasard ou il y a un décalage temporel). Maintenant, le formulaire est visible pour tous les travailleurs. Aussi dans le formulaire il y a un champ "assigné à". La personne de Group1 qui a fait l'approbation (peut-être en même temps que l'opération approuve) doit ajouter un nom de travailleur (worker2) à assigner à field.Now Worker2 a éditer juste pour le formulaire de Workers1 pas pour d'autres formes. Pouvons-nous le faire avec des flux de travail sans codage? – ephieste

+0

Supposons que Worker55 a créé un formulaire et que je l'ai approuvé et affecté à Worker66. Maintenant, le formulaire est visible pour tout le monde car il est approuvé et Worker66 a le droit d'édition pour le formulaire Worker55 (car assigné à: Worker55). Je peux supprimer Worker66 et écrire Worker77.Worker77 a maintenant l'autorisation d'édition pour Worker55 'formulaire pas Worker66. Si j'écris Worker77 et Worker66 en même temps à "assigné à". Ensuite, les deux peuvent modifier le formulaire Worker55. Trouvez-vous la situation? – ephieste

+0

J'ai créé Group1 (liste d'approbation) via les paramètres de versionnage. – ephieste

1

comme Paul Lucas mentionné, vous pouvez le faire en utilisant un récepteur d'événements ItemAdded et ItemUpdated et des méthodes comme celles-ci, à l'exception ajoutée la manipulation

public override void ItemUpdated(SPItemEventProperties properties) 
{ 
    base.ItemUpdated(properties); 
    SPListItem item = properties.ListItem; 
    SetRights(item, ((SPFieldUserValue)item["AssignedTo"]).User, SPRoleType.Reader);      
} 

private void SetRights(SPListItem item, SPPrincipal principal, SPRoleType role) 
{ 
    SPRoleDefinition RoleDefinition = item.ParentList.ParentWeb.RoleDefinitions.GetByType(role); 
    SPRoleAssignment RoleAssignment = new SPRoleAssignment(principal); 
    RoleAssignment.RoleDefinitionBindings.Add(RoleDefinition); 

    if (!item.HasUniqueRoleAssignments) 
    { 
     item.BreakRoleInheritance(true); 
    } 
    item.RoleAssignments.Add(RoleAssignment); 
    item.SystemUpdate(false); 
} 
+0

C'est dans le même sens que je pensais. Sur la base des commentaires de ma réponse, il peut être nécessaire de modifier le statut d'approbation (s'il est approuvé, puis tous les utilisateurs peuvent lire l'élément) et le fait qu'il peut y avoir plusieurs utilisateurs dans le champ affecté. –

+0

Merci beaucoup. Où et comment puis-je utiliser ce code? Parce que je ne peux pas atteindre les serveurs et/ou utiliser des modules complémentaires. Je dois concevoir le système via le concepteur de point de partage. C'est tout ce que je suis autorisé à faire. – ephieste

+0

bien, alors vous n'avez pas de chance, car cela devrait être dans une bibliothèque de classes dll, installé sur le serveur - comme c'est le cas avec presque tout dans SP ... – kerray

Questions connexes