我目前正在创建一个我拥有属于公司的员工的结构.在这家公司内,我需要能够创建几个组.排名如果你愿意.您可以为较低级别分配较少的权限,为较高级别分配较多权限.
我想去对象级权限,我注意到django-guardian项目给了我正确的我需要的东西.它适用于本机用户和组对象,因此我现在正在尝试找到一种在公司对象中实现本机组对象的方法.
我面临的问题是组中的名称是唯一的.因此,如果2家公司添加相同的组,则会发生错误.
我找到了一种在某种程度上有效的实现,但对我来说似乎相当'hacky'.在我的公司,我声明了一个引用Group的组变量:
class Company(models.Model):
...
groups = models.ManyToManyField(Group, through='CompanyRole')
Run Code Online (Sandbox Code Playgroud)
CompanyRole基本上包含组名和对公司和组的引用
class CompanyRole(models.Model):
group = models.ForeignKey(Group)
company = models.ForeignKey(Company)
real_name = models.CharField(max_length=60, verbose_name=_('Real name'))
objects = CompanyGroupManager()
Run Code Online (Sandbox Code Playgroud)
我用一种方便的方法创建了一个自定义管理器来添加一个新的"公司组"
class CompanyGroupManager(models.Manager):
def create_group(self, company, group_name):
un_group_name = str(company.id) + '#' + group_name
group = Group.objects.create(name=un_group_name)
company_group = self.model(
real_name=group_name,
company=company,
group=group
)
company_group.save(using=self._db)
return company_group
Run Code Online (Sandbox Code Playgroud)
这是我真的觉得不舒服的部分.为了使用Group模型上的唯一名称更改问题,我使用了公司ID,哈希符号和实际组名称的组合来避免冲突.
现在我的问题是:在我的场景中是否有更好的方法,我错过了什么或者这是完成我需要的好方法吗?
我正在学习C++,C++ Primer plus.但我只是想看看cplusplus网站并跳过一点文件处理.
我非常了解来自java,php,visual basic的文件处理的基础知识.但我遇到了一个非常奇怪的路线.
ostream os(&fb);
Run Code Online (Sandbox Code Playgroud)
fb代表一个filebuf.我只是没有得到这个的语法,但我可以弄清楚它是一样的:
ostream os = &fb;
Run Code Online (Sandbox Code Playgroud)
但我从未真正了解过这种初始化变量的方法.
所以我很想知道.我只是毫无意义,错过了一个真正有用的功能吗?这种初始化方式只是旧的吗?它有什么不同吗?
提前致谢.
我正在构建一个工具,用户可以在其中输入他们感兴趣的一些项目。每 24 小时我想运行一个脚本来检查来自外部源的某些 JSON 响应以获取这些主题。
我的问题是:为什么要制作脚本并使用 crontab 运行它,而不是使用node-cron插件制作模块并将其包含在 app.js 文件中。或者你永远不会这样做?
基本上想在这方面进行最佳实践。
我觉得我在java方面很有经验,但似乎事实并非如此,我昨天注意到了一些事情,我以前用过的东西,但从未真正意识到它的作用.我用谷歌搜索,但没有找到我的问题的答案.
如果我声明一个int数组,并使用Array的静态排序函数来对我的数组进行排序,我只需要输入
Arrays.sort( numbers );
Run Code Online (Sandbox Code Playgroud)
代替
numbers = Array.sort( numbers );
Run Code Online (Sandbox Code Playgroud)
这在C和C++中看起来很容易,因为你可以在那里使用指针.所以我想知道的是,这是怎么做到的?这是阳光的优势,还是我在这里完全没有意义?