jesustorresdev / slack-badges-bot

2 stars 1 forks source link

Administración #18

Closed mbdaso closed 5 years ago

mbdaso commented 5 years ago

Mirando la documentación hay un app home para hablar con el bot:

https://api.slack.com/reference/app-home

Podría ser el sitio para configurar cosas privadas. Por ejemplo, para decirle quién puede asignar medallas. Podría ser solo el admin, todos, los miembros de un grupo concreto.

Creo que los casos de uso son:

  1. El admin / puede hacer cualquier operación desde el app home y desde cualquier canal. Asi lo ven todos.
  2. Un usuario normal solo puede consulta sus badges ganados por el app home. No los de los demmás.
  3. Que los usuarios pueda pedir la lista de bades disponibles por el app home, puede ser algo en la configuración.

Originally posted by @aplatanado in https://github.com/aplatanado/slack-badges-bot/pull/14#issuecomment-522804518

Me gustaría hacer esto con la línea de comandos, ya que tenemos una entidad para personas, se me ocurre que se puede poner en las entidades además de la información de contacto, los permisos que tienen sobre las medallas. Algo parecido a lo que hace slack: https://api.slack.com/scopes Los permisos pueden ser un string que diga qué comandos puede ejecutar esa persona en slack, por ejemplo:

permissions = 'badges:give,badges:list,awards.self:list,awards.others:list'.

Luego con la línea de comando se puede modificar a una persona para cambiar sus permisos.

jesustorresdev commented 5 years ago

Es una muy buena idea. Me encanta. Normalmente (y te servirá para la memoria) primero se suele pensar como en una matriz. Por ejemplo en las columnas, que objetos se pueden manipular:

En las filas, que acciones: list, give, etc. Claro quizás no sea awards.self:list sino awards:list_self o awards:list_all.

Digamos que listar todos o solo los tuyos son capacidades diferentes en esa matriz.

Es importante cuando se implementa un sistema de seguridad que haya unos valores por defecto razonables. Para la memoria se puede hacer la tabla / matrix marcando con un X los permisos por defecto.

Bueno, esto es un rollo formal para pensar y dejalo documentado.

Respecto a la implementación, no te lies. Si lo haces permission = "cadena" en Python obtendrás una cadena que tendrás que parsear. Dividir por , por : intepretar y volver a generar.

Pero estás usando JSON precisamente para ahorrarte todo eso. Los permisos pueden ser un dict con una entrada por entidad y para cada entrada una lista de permisos; ['give', 'list']

Eso así es más directo de manipular en Python. No es una cadena que hay que interpretar. Son estructuras de datos que python ya entiende. Y, lo mejor, al pasar a JSON, se convierten solas a array y objects de JSON. La volver a recuperar, se convierten automáticamente diccionarios y listas de python. Así que la manipulación es directa. Sin tener que añadir código para parsear.

Al menos eso es lo que yo haría.