如何设置在Django中创建的默认权限名称?

时间:2014-08-23 03:10:25

标签: django model permissions

我正在使用django 1.6

现在,当我定义模型时,它会为它创建三个权限记录(can_createcan_updatecan_delete)。

我现在正在为模型添加其他权限(在这个问题中无关紧要),并希望创建一个视图,让用户将它们全部分配给用户和组。


现在的问题是:

我想替换三个默认创建的权限时显示的默认名称

有没有办法做到这一点?

3 个答案:

答案 0 :(得分:2)

是的,有可能在django中创建模型/表时创建自定义权限。但是这将创建额外的自定义权限,默认情况下3个权限将创建即(添加,更改,删除)。可以通过跟踪事物来创建自定义权限。

public class JpaPayloadConverter implements AttributeConverter<Payload, String> {

    // ObjectMapper is thread safe
    private final static ObjectMapper objectMapper = new ObjectMapper();

    private Logger log = LoggerFactory.getLogger(getClass());

    @Override
    public String convertToDatabaseColumn(Payload attribute) {
        String jsonString = "";
        try {
            log.debug("Start convertToDatabaseColumn");

            // convert list of POJO to json
            jsonString = objectMapper.writeValueAsString(attribute);
            log.debug("convertToDatabaseColumn" + jsonString);

        } catch (JsonProcessingException ex) {
            log.error(ex.getMessage());
        }
        return jsonString;
    }

    @Override
    public Payload convertToEntityAttribute(String dbData) {

        Payload payload = new Payload();
        try {
            log.debug("Start convertToEntityAttribute");

            // convert json to list of POJO
            payload = objectMapper.readValue(dbData, Payload.class);
            log.debug("JsonDocumentsConverter.convertToDatabaseColumn" + payload);

        } catch (IOException ex) {
            log.error(ex.getMessage());
        }
        return payload;

    }
}

这样做的唯一方法是在运行 manage.py migrate 时创建这些额外权限(创建权限的函数连接到post_migrate信号)。当用户尝试访问应用程序提供的功能时,您的代码负责检查这些权限的值(查看任务更改任务状态,< em>关闭任务。)继续上面的例子,下面检查用户是否可以查看任务:

class Task(models.Model):
...
  class Meta:
    permissions = (
        ("view_task", "Can see available tasks"),
        ("change_task_status", "Can change the status of tasks"),
        ("close_task", "Can remove a task by setting its status as closed"),
    )

可以在这里看到django doc django permission description

答案 1 :(得分:0)

基于this blog post和此Django ticket,我会说这是不可能的,也不建议更改这些代号(因为它们在管理员中使用)。但是,可以更改人类可读的名称(例如“可以添加权限”)

答案 2 :(得分:0)

我无法在已经存在的答案中添加评论,因此添加了新的答案。

我一直在寻找解决方案而找不到任何解决方案。因此,我只使用默认权限并使用权限重新创建它们并使用您想要的任何名称和代号。 Django文档here

class Foo(models.Model):
    title = models.CharField(max_length=250)

    class Meta:
        default_permissions = ()
        permissions = (
            ("add_foo", "Can add foo"),
            ("change_foo", "Can change foo"),
            ("delete_foo", "Can delete foo"),
            ("view_foo", "Can view foo"),
            ("list_foo", "Can list all foo")
        )