Capacidades para o Meta do Usuário

Qual é a vantagem de usar capabilities vez de usermeta ?

Por exemplo, um cap access_feature_x vs meta access_feature_x . Eu posso usar current_user_can() vs get_user_meta() em várias verificações.

Então, o que o melhoramento oferece?

Editar

A questão parece muito ampla para uma resposta específica. Então, vou fornecer um exemplo de contexto. Mantenha suas respostas originais, pois são úteis e adicione informações adicionais abaixo da sua resposta atual.

Por exemplo ,

  1. Um recurso no site do membro do feature_x .
  2. O recurso é desabilitado principalmente para todos os usuários, exceto o administrador e os editores.
  3. Uma vez que a inscrição do usuário para o recurso é ativada e a nova parte da UI é mostrada aos usuários.

Para o exemplo acima. Eu posso ir com usermeta e resources. Como você abordaria o problema dado? Atualmente eu estou fazendo com meta

Solutions Collecting From Web of "Capacidades para o Meta do Usuário"

Não há uma única resposta, porque ambos têm prós e contras, dependendo do que você deseja armazenar e por quê.

Uma lista (provavelmente não exaustiva) de diferenças a considerar para uma escolha:

  • As capacidades são projetadas para verificar se um usuário pode fazer algo ou não. user_can e current_user_can estão disponíveis para ajudá-lo a verificar as permissions dos usuários. Você também pode implementar isso com o meta do usuário, mas não faz sentido quando você possui esse recurso no núcleo.

  • Não há dúvida de que os resources podem ser usados ​​para agrupar usuários com características semelhantes, mesmo que os grupos não estejam relacionados a permissions. Nesse caso, as capacidades são para os usuários um pouco semelhantes aos termos de taxonomia são para postagens. user_can function user_can pode ser usada para verificar se um usuário possui uma capacidade ou não (semelhante ao has_term ), mas não há nenhuma function central que faça o mesmo para o meta. No entanto, recuperar uma coleção de usuários por resources é provavelmente mais caro do que recuperar usuários por uma simples meta consulta (é um palpite, não baseado em dados reais de perfis de desempenho).

  • Para filtrar on the fly (sem alteração de db), todas as capacidades atribuídas a um usuário são bastante fáceis (especialmente se a capa for verificada com user_can / current_user_can e não há motivo para não), ao fazer o mesmo para o meta é muito mais difícil.

  • O Meta pode lidar com dados nesteds (por exemplo, arrays e até mesmo diferentes (conjuntos de) valores para a mesma meta-chave). Isso não é possível com resources.

  • As capacidades podem ser agrupadas em funções. E os papéis também têm uma UI no backend que permite atribuir um “conjunto” de resources ao atribuir uma function. Não há tal benefício para o meta.

  • As capacidades são entidades independentes de usuários, e eles sobrevivem aos usuários: se você excluir todos os usuários que possuem capacidade, ele permanece lá. O mesmo não se aplica ao meta: todo o meta é com um usuário se ele for excluído.

Editar

Após a edição no OP, eu diria que as capacidades são muito melhores: você está implementando com meta algo que o núcleo já faz com resources e é exatamente o que os resources devem ser.

Como exemplo, pense na function add_menu_page , tem um argumento de $capability que permite que você mostre uma página de menu somente para usuários que possuem essa capacidade.

Este é apenas um exemplo, existem diferentes funções que aceitam resources como um argumento. Além disso, como dito no primeiro ponto antes da edição, não faz sentido implementar a partir do zero uma característica que o núcleo já possui.

A diferença é que as capacidades fazem parte do sistema de permissão de access do site, que utiliza e pode ser alterado pelas ferramentas e API integradas que são projetadas para gerenciar permissions. Você pode criar seu próprio esquema de permissão, mas então não será fácil replace por ferramentas ou códigos que esperem que as permissions de access sejam tratadas em resources.

Usando meta-campos em vez de resources, você também perde a capacidade de agrupar usuários em funções, o que talvez seja ou não importante.

Sua pergunta destaca novamente um dos pontos suaves no núcleo do WordPress, a falta de separação entre o autor do conteúdo e o usuário do site. Quando você pensa em um usuário como usuário do site, você deve ir às capacidades, mas se seu código lidar com um usuário como um autor de conteúdo, você pode fazer melhor usando meta-campos.

Quanto ao exemplo específico na parte de edição. Isso cai muito bem no controle de access e você mesmo precisa de papéis reais, por isso as capacidades são o caminho a seguir.

As capacidades de usuário permitirão definir configurações de access ao site para um tipo de conta de usuário / usuário específico, enquanto que os meta-dados permitem que você faça as configurações individualmente para cada Post / Page ou qualquer coisa que suporte o Meta no WordPress. Em outras palavras, as capacidades são parte da ACL (camada de controle de access), ao passo que o Meta é melhor quando usado para apresentação de dados.

As capacidades de usuário são melhores se você estiver escrevendo um aplicativo que usa determinado controle de access no escopo global do seu aplicativo, enquanto que o Meta do usuário é melhor se você deseja aplicar restrição por Mensagem / Página. Observe que, se você controlar a ACL usando Capacidades, você precisará criar uma conta de Usuário de Tipo de Usuário específico para aplicar certas restrições; No entanto, você precisará certificar-se de que (manualmente) adicione valor Meta específico a cada Post, Página para a qual você deseja aplicar ACL.

O uso de Capacidades e Meta é muito específico para aplicativos e tenho medo se eu posso generalizar os melhores cenários para você definir qual é o melhor entre os dois.