コード例 #1
0
        private static void SeedPermissions(Roles roles)
        {
            foreach (var item in typeof(PermissionsSeeder).Assembly.GetTypes().Where(t => t.IsClass && !t.IsAbstract && t.IsSubclassOf(typeof(ObjectBase))))
            {
                var instance = Activator.CreateInstance(item) as IPermissable;
                var defaultPermissionsAttribute = item.GetAttribute <DefaultPermissionsAttribute>();
                var isDefault   = defaultPermissionsAttribute?.Role == RoleNames.DefaultUsers;
                var isAdmin     = defaultPermissionsAttribute?.Role == RoleNames.Administrators;
                var isPowerUser = defaultPermissionsAttribute?.Role == RoleNames.PowerUsers;

                if (!isAdmin)
                {
                    roles.CreatePermission(instance.CreatePermissionName, true);
                    roles.AddPermissionsToRole(instance.CreatePermissionName, RoleNames.Administrators, true);
                    roles.AddPermissionsToRole(instance.CreatePermissionName, RoleNames.PowerUsers);
                    if (isDefault)
                    {
                        roles.AddPermissionsToRole(instance.CreatePermissionName, RoleNames.DefaultUsers);
                    }

                    roles.CreatePermission(instance.EditPermissionName, true);
                    roles.AddPermissionsToRole(instance.EditPermissionName, RoleNames.Administrators, true);
                    roles.AddPermissionsToRole(instance.EditPermissionName, RoleNames.PowerUsers);
                    if (isDefault)
                    {
                        roles.AddPermissionsToRole(instance.EditPermissionName, RoleNames.DefaultUsers);
                    }

                    roles.CreatePermission(instance.DeletePermissionName, true);
                    roles.AddPermissionsToRole(instance.DeletePermissionName, RoleNames.Administrators, true);
                    if (isDefault)
                    {
                        roles.AddPermissionsToRole(instance.DeletePermissionName, RoleNames.DefaultUsers);
                        roles.AddPermissionsToRole(instance.DeletePermissionName, RoleNames.PowerUsers);
                    }
                    else if (isPowerUser)
                    {
                        roles.AddPermissionsToRole(instance.DeletePermissionName, RoleNames.PowerUsers);
                    }

                    roles.CreatePermission(instance.ViewPermissionName, true);
                    roles.AddPermissionsToRole(instance.ViewPermissionName, RoleNames.Administrators, true);
                    roles.AddPermissionsToRole(instance.ViewPermissionName, RoleNames.PowerUsers);
                    if (isDefault)
                    {
                        roles.AddPermissionsToRole(instance.ViewPermissionName, RoleNames.DefaultUsers);
                    }
                }
            }
        }