ejplatform / ej-server

EJ uses gamification and machine learning to promote discussions and participation in a virtual democracy
https://ejplatform.github.io/ej-server/
Other
38 stars 17 forks source link

Implementar permissões no EJ #317

Closed ricardopoppi closed 3 years ago

ricardopoppi commented 6 years ago

O Django trabalha com um sistema de grupos/permissões inspirado no Linux. Podemos dar permissões para usuários ou grupos e o usuário herda todas as permissões de seus grupos.

Também é possível definir permissões mais ou menos arbitrárias como "o autor de uma conversa sempre tem permissão para editá-la". Os usuários comuns não tem permissão específica para nada e os usuários "superuser" tem implicitamente as permissões para fazer qualquer coisa

Assim, minha sugestão é criar as seguintes permissões:

(i) Criar conversas em algum board (/{board-slug}/{conversation-slug}/) (ii) Promover conversas p/ o board global (/conversations/{conversation-slug}/)

Pro caso (i), minha sugestão é que a permissão seja setada globalmente através de um setting. Assim, algumas instalações podem permitir conversas individuais e outras não.

Pro caso (ii), criamos uma permissão explicita no banco de dados. No caso do CPA, o admin Django pode atribuí-la ao grupo CPA e todos os membros do grupo vão ter acesso a essa permissão.

Em suma:

  1. Conf no constance para o número de boards disponíveis para o usuário padrão (no caso do EJ genérico vamos setar para 1 e o CPA para zero)
  2. Criar um tipo de permissão para criação de n boards, que será usada para grupos específicos do django
  3. Criar uma permissão de acesso ao rocket. Só quem tem essa permissão explicitamente setada terá usuário criado no rocket e vizualizará o botão "Painel CPA" (no django vamos atribuir essa permissão para o grupo CPA)
  4. Permissão específica para promover conversas para o board público /conversations
rodrigocam commented 6 years ago
  1. Conf no constance para o número de boards disponíveis para o usuário padrão (no caso do EJ genérico vamos setar para 1 e o CPA para zero)

Criei uma constante no constance chamada MAX_BOARD_NUMBER, ela é responsável por limitar a quantidade de boards que um usuário comum pode criar. Por default, é um quadro por usuário, para alterar essa quantidade (no caso do CPA) é só entrar no django admin e na seção Constance alterar este valor.

rodrigocam commented 6 years ago
  1. Criar um tipo de permissão para criação de n boards, que será usada para grupos específicos do django

Criei uma permission no app ej_boards chamada can_add_board, que verifica se um usuário pode criar um board. No django admin portanto pode-se conceder essa permission a um grupo (Criar grupo -> Em usuário, adicionar um grupo) ou a um usuário específico (Em usuário, adicionar permission).

[edit] Existe uma permission criada nas rules do app ej_boards que verifica se o usuário possui a permissão do django admin can_add_board (passa por cima de tudo) e se não tiver , verifica se o usuário se encaixa no limite de boards.

rodrigocam commented 6 years ago
  1. Criar uma permissão de acesso ao rocket. Só quem tem essa permissão explicitamente setada terá usuário criado no rocket e vizualizará o botão "Painel CPA" (no django vamos atribuir essa permissão para o grupo CPA).

Criei um permission nas rules do app ej_rocketchat que dá permissão para acessar o rocketchat se o usuario for super user ou tiver a permissão de acesso concedida pelo django admin. Quando criarmos o grupo de permissões "CPA" é só adicionar essa permissão no django admin e todos os membros do grupo terão acesso.

rodrigocam commented 6 years ago
  1. Permissão específica para promover conversas para o board público /conversations

Criei uma permission nas rules do app ej_conversation que dá permissão para promover conversar de boards para as conversas globais (/conversations), se o usuário for superuser ou se ele possui a permissão "can_publish" do django admin.

ricardopoppi commented 6 years ago

@fabiommendes a permissão ej_rocketchat reflete de duas maneiras pra quem a tem setada: (i) criação de usuário no rocket com base no user django (ii) aparecer o botão painel cpa na navbar

IMPORTANTE: Toda criação de usuário pela app no django NÃO DEVE gerar user rocket. O user rocket deve ser gerado apenas para aqueles que logarem ou acessarem o painel cpa e tiverem a permissão ej_rocketchat EXPLICITAMENTE setada